处理嵌套字典的最快方法

4

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

有没有关于如何让我的代码更加简洁和快速的指南?非常感谢提前帮助!

https://pypi.org/project/dictquery/ - Joseph Biju Cadavil
2个回答

4
一些要点:
  1. 你的主循环中未使用 main_key 变量,因此你可以直接迭代 dictionary.values()
  2. if main_value: 语句是多余的,因为如果 main_value 为空,下面的 for 循环不会执行任何操作。
  3. 最内层的 value.items() 循环是不必要的,因为它只是查找 value 字典的 date 键并打印其值,你可以通过使用方括号访问 value 字典的 date 键来实现。加上一个 try 块以忽略缺少 date 键的情况,因为这就是你当前代码的行为。
考虑到以上几点,你的代码应该如下所示:
for main_value in dictionary.values():
    for value in main_value:
        try:
            print(value['date'])
        except KeyError:
            pass

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接