首页 > 解决方案 > Python优化字典迭代

问题描述

我有一个问题,我正在运行一个庞大的嵌套字典,并且希望加快速度,因为浏览整个字典所需的时间大约是一周的处理时间。是否有更快的方法来迭代以下内容(我不反对重新设计结构)?我需要迭代而不是矢量化,因为 2 的状态取决于 1 中发生的情况。

我正在嵌套,就像结构基本上在下面发生的那样

def function(x):
    return 1

d = {'1': {'1a': 0, '1b': 0}, '2': {'2a': 0, '2b': 0, '2c': 0 } , '3': {'3a':0}}
s = {}
for outer_key, inner_dict in d.iteritems():
    for inner_key, inner_value in inner_dict.iteritems():
        s = function(inner_value)

    print(s)

标签: pythondictionary

解决方案


我假设通过'迭代'你的意思是你遍历外部字典中的每个键,然后遍历返回的内部字典中的每个键。

当您以这种方式与字典交互时,您实际上将它们视为链表(或在本例中,视为嵌套的、不规则的列表)。遍历单个列表会产生 的运行时间O(n),嵌套列表以O(n * n) = O(n^2);结尾。如果此结构非常大,这将导致您遇到的大型运行时。

此外,您需要考虑对子字典的每个成员执行的操作。如果您正在执行某种通过先前字典返回并调整它们等的处理,则您的运行时可能会更糟(for一旦获得子键,请考虑嵌套循环操作)。

我会质疑为什么您需要在字典的两个层次结构中点击每个键,因为使用字典的主要优点是在您知道特定键并需要找到其关联值的情况下。

您提到嵌套字典的状态取决于先前字典的状态。为什么不使用字典树(如果您需要在嵌套结构中进行恒定时间查找)而不是嵌套字典?树将允许您维护子字典之间的意外情况,如果您发现实际上不需要点击每个节点,遍历树可以为您带来一些运行时收益。

随时澄清您在整个过程中到底在做什么,我可以更新我的答案以更具体地满足您的需求!


推荐阅读