在Python中使用元组作为字典键

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

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']

4

你不能轻易地做到这一点。你需要循环遍历所有的键来检查是否匹配:

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

如果您的应用程序需要频繁执行此操作,则最好创建索引;字典或类似工具,将所有键中第二个值映射到特定键。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接