2017-08-16 65 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

相關問題