4

n個の値のタプルをキーとして持つ辞書を操作しようとしています。2番目の値が10のタプルを見つけたい(例)

('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')

私がそれをどのように行うことができるか考えていますか?ありがとう!

4

4 に答える 4

10

その特定のシナリオでは、すべてのキーを反復処理して、述語に対してテストする必要があります。

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

繰り返し検索するためにこれをより迅速に実行したい場合で、チェックするフィールドが事前にわかっている場合は、各タプルの特定のインデックスの値と、指定されたキーを持つキーとの間でマップするインデックスを作成できます。価値:

from collections import defaultdict

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

そして、それを使用して特定の値を検索できます。

results = index_2nd['10']
于 2012-09-08T17:54:09.733 に答える
4

できません、簡単ではありません。一致するキーを確認するには、すべてのキーをループする必要があります。

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

アプリケーションでこれを頻繁に行う必要がある場合は、インデックスを作成することをお勧めします。すべてのキーの2番目の値を特定のキーにマップする辞書など。

于 2012-09-08T17:54:18.463 に答える
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
于 2012-09-08T17:56:54.847 に答える
1
def find(key_element):
    return [value for key, value in a.iteritems() if len(key) > 1 and key[1] == key_element]
于 2012-09-08T17:56:05.530 に答える