我有一个包含46,000个键:值对的字典,其中每个键都有一个3项列表作为值:
my dict = {key1: ['A', 'B', 'C'], key2: ['B', 'A', 'G'], key3: ['Z', 'H', 'I']......}
我有一个包含数百个值的列表:
L1 = ['A', 'A', 'B', 'D', ......]
如何遍历列表L1和L1中的每个项目,匹配值[0]与列表项匹配的每个字典值?然后,我希望对字典的值[1]和值[2]执行其他操作,仅对字典中列表项匹配值[0]的那些键:值对。
在上面的示例中,L1中的第一项 - “A”仅匹配key1: ['A', 'B', 'C']
。
我似乎无法找到办法做到这一点?谢谢你的帮助!
答案 0 :(得分:3)
没有任何捷径,你可以这样写:
#!/usr/bin/env python
d = {
'key1' : ['A', 'B', 'C'],
'key2' : ['B', 'A', 'G'],
'key3' : ['Z', 'H', 'I']
}
l = ['A', 'A', 'B', 'D']
uniq_l = set(l) # you don't need to check duplicates twice
for key, value in d.items():
if value[0] in uniq_l:
print "Match", key, value
# Output:
# Match key2 ['B', 'A', 'G']
# Match key1 ['A', 'B', 'C']
答案 1 :(得分:1)
您写道:“如何遍历列表L1 ...”所以我假设按此顺序执行操作对您很重要:
from collections import defaultdict
my_dict = {
'key1': ['A', 'B', 'C'],
'key2': ['B', 'A', 'G'],
'key3': ['Z', 'H', 'I'],
'key4': ['A', 'Q', 'W'],
}
L1 = ['A', 'A', 'B', 'D']
lookup = defaultdict(list)
for items in my_dict.itervalues():
lookup[items[0]].append(items[1:])
for key in L1:
for items in lookup[key]:
print items
给出:
['B', 'C']
['Q', 'W']
['B', 'C']
['Q', 'W']
['A', 'G']
Python 2.7,BTW。
答案 2 :(得分:0)
>>> my_dict
{'key3': ['Z', 'H', 'I'], 'key2': ['B', 'A', 'G'], 'key1': ['A', 'B', 'C']}
>>> L1
['A', 'A', 'B', 'D']
>>> {i: {key: value for key, value in my_dict.iteritems() if value[0] == i} for i in set(L1)}
{'A': {'key1': ['A', 'B', 'C']}, 'B': {'key2': ['B', 'A', 'G']}, 'D': {}}
这意味着'A'匹配{'key1':['A','B','C']}等。这是一个字典因为46000个值,我认为可能有多个匹配。
答案 3 :(得分:0)
我可能会建立一个辅助dict
>>> mydict = {'key1': ['A', 'B', 'C'], 'key2': ['B', 'A', 'G'], 'key3': ['Z', 'H', 'I']}
>>> from collections import defaultdict>>> mydict_aux = defaultdict(list)
>>> for k,v in mydict.items():
... mydict_aux[v[0]].append(k)
...
>>> mydict_aux['A']
['key1']