Python优化Dict迭代

时间:2018-09-05 13:16:12

标签: python dictionary

我遇到了一个问题,我正在运行大量的嵌套字典,并且希望加快处理速度,因为遍历整个字典所需的时间约为一周的处理时间。有没有一种更快的方法来遍历以下内容(我不反对重新构造结构)?我需要迭代而不是向量化,因为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)

1 个答案:

答案 0 :(得分:1)

我假设通过“ 迭代”表示您要遍历外部字典中的每个键,然后遍历返回的内部字典中的每个键。

以这种方式与字典进行交互时,实际上是将它们视为链接列表(或在这种情况下为嵌套的,参差不齐的列表)。遍历单个列表将产生O(n)的运行时,而嵌套列表最终以O(n * n) = O(n^2)结尾;如果此结构很大,这将负责您正在经历的大型运行时。

此外,您需要考虑对子字典的每个成员执行的操作。如果您正在执行某种处理,可以追溯到先前的字典并对其进行调整等,则运行时可能会更糟(一旦找到子键,请考虑嵌套for循环操作)。

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

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

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