处理嵌套字典的最快方法

Fastest way to handle nested dictionaries

我是 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)

关于如何使我的代码更简洁、更快速的任何指示?非常感谢!

几点:

  1. 主循环中的 main_key 变量未使用,因此您可以简单地迭代 dictionary.values()
  2. if main_value: 语句是多余的,因为如果 main_value 无论如何都是空的,下面的 for 循环将不会迭代。
  3. 最内层的 value.items() 循环是不必要的,因为它所做的只是找到 value 字典的 date 键并打印它的值,你可以通过简单地使用方括号通过 date 键访问 value 字典。在它周围放置一个 try 块以忽略丢失的 date 键,因为这就是您当前代码的行为方式。

考虑到以上几点,您的代码应该如下所示:

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

您可以创建一个函数和 return 值:

>>> 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).