2012-09-08 58 views
3

我正在嘗試使用n值爲元組的字典作爲鍵。我想找到第二個值爲10的元組(例如)在Python中使用元組作爲字典鍵

('HI', '10', '10', '10', '10', '10000', 'true', '0.5GiB', '8', '100000s', '100MiB') 
('HI', '100', '10', '10', '10', '100', 'false', '0.5GiB', '8', '100000s', '100MiB') 
('HI', '100', '10', '10', '10', '1000', 'true', '0.7GiB', '8', '1000s', '100MiB') 

任何ideads如何做到這一點?謝謝!

回答

9

對於特定的情況下,你必須遍歷所有的按鍵和測試他們對你的斷言:

results = set(k for k in your_dict if k[1] == '10') 

如果你想爲重複查找更快速地做到這一點,你知道提前時間是什麼場(S)你會檢查,你可以建立一個值之間的映射在每個元組具有給定值的所有鍵的特定指數表示:

from collections import defaultdict 

index_2nd = defaultdict(set) 
for k in your_dict: 
    index_2nd[k[1]].add(k) 

然後你可以只使用查找特定值:

results = index_2nd['10'] 
3

你不能,不容易。你不得不遍歷所有鍵來檢查這些匹配:

matching = [key for key in yourtupledict if key[1] == '10'] 

如果你需要做這個有很多在你的應用程序,你會好起來的創建索引;字典或類似的東西,它將你的所有關鍵字中的第二個值映射到特定關鍵字。

1
def find(key_element): 
    return [value for key, value in a.iteritems() if len(key) > 1 and key[1] == key_element] 
2

使用iterkeys()遍歷鍵

d = {(1,2,3):1,(1,2,4):2,(2,2,3):3} 

for k in d.iterkeys(): 
    if k[0] == 1: 
     print k 
相關問題