4

我正在尝试使用具有 n 个值的元组作为键的字典。我想找到第二个值为 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']

如果你需要在你的应用程序中做很多事情,你最好创建索引;将所有键中的第二个值映射到特定键的字典或类似工具。

于 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 回答