处理嵌套字典的最快方法

时间:2018-11-07 04:36:56

标签: python python-3.x performance dictionary coding-efficiency

我是python的新手,我正在尝试学习编写非常快速的代码的最佳方法。我正在做一个处理嵌套字典的练习,这是我正在使用的字典:

{
    "key_1": [
        {
            "title": <title>,
            "date": <date>,
            "text": <text>
        }
    ],
    "key_2": [
        {
             "title": <title>,
            "date": <date>,
            "text": <text>
        }
     ],
    "key_3": [
            {
                 "title": <title>,
                "date": <date>,
                "text": <text>
            }
     ]
}

这是我编写的用于访问它的代码。但是因为我有三个嵌套的for循环,所以我认为这没有它的最快速度:

for main_key, main_value in dictionary.items():
    if main_value:
        for value in main_value:
            for sub_keys, sub_values in value.items():
                if sub_keys == "date":
                   print(sub_values)

关于如何使我的代码更简洁,更快捷的任何指示?提前非常感谢!

2 个答案:

答案 0 :(得分:4)

几点:

  1. 主循环中的main_key变量未使用,因此您可以简单地遍历dictionary.values()
  2. if main_value:语句是多余的,因为如果for仍然为空,则以下main_value循环将不会迭代。
  3. value.items()上最里面的循环是不必要的,因为它所做的只是查找date字典的value键并打印其值,您只需使用方括号即可完成此操作通过value键访问date字典。在其周围放置一个try块以忽略丢失的date键,因为这是您当前代码的行为。

考虑到以上几点,您的代码应类似于:

for main_value in dictionary.values():
    for value in main_value:
        try:
            print(value['date'])
        except KeyError:
            pass

答案 1 :(得分:0)

您可以创建一个函数并返回值:

>>> def get_value(key1, key2=None):
...     if key1 and key2:
...         try:
...             return my_dict.get(key1).get(key2)
...         except Exception as e:
...             print(e)
...             return None
...     else:
...         return my_dict(key1)

我可以在您的代码中看到您只想访问date键。您可以执行以下操作:

>>> for x in my_dict:
...     print(my_dict[x].get('date'))

这是最快的操作。因为访问字典值的时间复杂度为o(1)。