2017-08-16 67 views
0

所以,我想知道什么是迭代字典的值并将其值与另一个变量进行比较的最快方法。我有一个特定的字典stucture这是非常简单的:在python中迭代字典值的最快方法是什么?

"data": [ 
    { 
    "id": "xxxxxxxxxxxxx" 
    }, 
    { 
    "id": "xxxxxxxxxxxxx" 
    }, 
    { 
    "id": "xxxxxxxxxxxxx" 
    }, 
    { 
    "id": "xxxxxxxxxxxxx" 
    }, 
    { 
    "id": "xxxxxxxxxxxxx" 
    }, 
    { 
    "id": "xxxxxxxxxxxxx" 
    } 
] 

我已经遍历some_dict['data'],然后进行比较时使用此代码['id']值:

for item in some_dict: 
    if item['id'] == some_value: 
     #do stuff 

但随着大尺寸的字典,它需要一个很多时间,所以我很好奇其他方式做我想做的事情。我听说过那些适合巨大列表迭代的集合,但是无论如何,从我的字典结构中使用它呢?

回答

2

正如我所看到的,你的方式没问题。但是,如果你坚持用不同的方式,那么你可以这样做:

from itertools import chain 
flat_list = list(chain.from_iterable([d.values() for d in some_dict['data']])) 
for item in flat_list: 
    if item == some_value: 
     # do stuff 

或者,如果你只是想检查存在:

if some_value in flat_list: 
    # do stuff 

关于set,如果有在id的重复值,它会消除它们。所以除非你很好,否则我不会使用它。

+0

它实际上是独一无二的ID,所以'set'根本不会打扰我。如果使用'chain'或'set'使得这个过程更快,或者“从字典到链/集”部分会使它无用? –

+0

这取决于您的字典列表的大小。如果它是“正常的”(最多100个左右),那么效果是微不足道的。如果这是一个巨大的列表(超过10000条),那么我认为你会开始注意到一些延误。但即使如此,它也不应该太糟糕。你可以这样思考:迭代,然后解引用或平坦化,然后迭代?请注意,_amortized最糟糕的情况是'字典'得到的项目是'O(n)',而列表的同一个动作是'O(1)'。 – nutmeg64

相关问题