我正在尝试使用带有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')
任何想法我怎么能这样做?谢谢!
答案 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]