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

时间:2012-09-08 17:49:37

标签: python tuples

我正在尝试使用带有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 个答案:

答案 0 :(得分:9)

对于那个特定的场景,你必须迭代所有的键并根据你的谓词测试它们:

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

答案 1 :(得分:3)

你不能,不容易。您必须遍历所有密钥以检查匹配的内容:

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

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

答案 2 :(得分: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

答案 3 :(得分:1)

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