将Dictionary中的键组合成列表中的元组

Lin*_*gxB 1 python dictionary tuples list

我正在寻找一种解决方案,根据列表作为值搜索字典中的键,然后将键附加到元组列表.我能够搜索正确的密钥但无法找到构建我期望的列表的方法.感谢善意的帮助.

如下所示,我想找到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
Run Code Online (Sandbox Code Playgroud)

预期产出:

[('conocerán','conocías','conozcas','conocían','conociéremos'),('NOT FOUND'),('NOT FOUND'),('planeáramos','planeareis','planearás','planeasteis')]
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 6

为什么不将字典转换为更合适/方便的结构并通过键执行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])
Run Code Online (Sandbox Code Playgroud)

打印:

[
    ['conozcas', 'conociéremos', 'conocías', 'conocerán', 'conocían'], 
    ['NOT FOUND'], 
    ['NOT FOUND'], 
    ['planeáramos', 'planearás', 'planeareis', 'planeasteis']
]
Run Code Online (Sandbox Code Playgroud)