我正在寻找一种解决方案,根据作为值的列表在字典中搜索键,然后将键附加到元组列表。我能够搜索正确的键,但找不到构建我期望的列表的方法。感谢您的帮助。
如下所示,我想找到d中所有值等于列表l中的元素的键,并将所有搜索到的键放入预期输出中显示的元组列表。
d = {'acutrar': 'acutrar',
'aguosa': 'aguoso',
'capitalizareis': 'capitalizar',
'conocerán': 'conocer',
'conociéremos': 'conocer',
'conocían': 'conocer',
'conocías': 'conocer',
'conozcas': 'conocer',
'pales': 'palar',
'planeareis': 'planear',
'planearás': 'planear',
'planeasteis': 'planear',
'planeáramos': 'planear'}
l = ['conocer', 'NOT FOUND', 'NOT FOUND', 'planear']
for word in l:
for (x,y) in d.items():
if y == word:
print(word, x) #I can only search for the keys but don't know how to build that list of tuples
预期输出:
[('conocerán','conocías','conozcas','conocían','conociéremos'),('NOT FOUND'),('NOT FOUND'),('planeáramos','planeareis','planearás','planeasteis')]
请您参考如下方法:
为什么不将字典转换成更合适/方便的结构并通过键执行 O(1) 查找而不是遍历所有项目并搜索值:
from collections import defaultdict
d = {'acutrar': 'acutrar',
'aguosa': 'aguoso',
'capitalizareis': 'capitalizar',
'conocerán': 'conocer',
'conociéremos': 'conocer',
'conocían': 'conocer',
'conocías': 'conocer',
'conozcas': 'conocer',
'pales': 'palar',
'planeareis': 'planear',
'planearás': 'planear',
'planeasteis': 'planear',
'planeáramos': 'planear'}
t = defaultdict(list)
for key, value in d.items():
t[value].append(key)
l = ['conocer', 'NOT FOUND', 'NOT FOUND', 'planear']
print([t.get(item, [item]) for item in l])
打印:
[
['conozcas', 'conociéremos', 'conocías', 'conocerán', 'conocían'],
['NOT FOUND'],
['NOT FOUND'],
['planeáramos', 'planearás', 'planeareis', 'planeasteis']
]
