迭代两个字典并获得Python中的列表

迭代两个字典并获得Python中的列表,python,list,loops,dictionary,Python,List,Loops,Dictionary,我有两个字典(d3和d4),我想看看其中一个字典(d3)的值是否在另一个字典(d4)的键中,在这种情况下,将该字典(d4)的值保存到一个新列表中 d3 = {0: ['mo', 'A', 'la'], 1: ['tel', 'A', 'Al'], 2: ['Jak', 'E', 'Pum']} d4 = {'ko' : 'Paul', 'la' : 'John', 'si' : 'Peter', 'Al' : 'Laura', 'gh' : 'Will'} a3 = d3.values() b3

我有两个字典(d3和d4),我想看看其中一个字典(d3)的值是否在另一个字典(d4)的键中,在这种情况下,将该字典(d4)的值保存到一个新列表中

d3 = {0: ['mo', 'A', 'la'], 1: ['tel', 'A', 'Al'], 2: ['Jak', 'E', 'Pum']}
d4 = {'ko' : 'Paul', 'la' : 'John', 'si' : 'Peter', 'Al' : 'Laura', 'gh' : 'Will'}
a3 = d3.values()
b3 = d3.keys()
a4 = d4.values()
b4 = d4.keys()
t = 0

for i in a3:    
if i not in b4 == -1:
    continue                 
else:          
    taxa = a4[t]
    t += 1 
print taxa
使用此代码,我没有得到预期的结果,应该是:

taxa = ['John', 'Laura']
如果d3的值不在d4的键中,那么最好在列表中返回“unknown”。因此,这种情况下的理想结果如下:

taxa = ['John', 'Laura', 'unknown']

我搜索了其他问题,虽然其中一些问题类似,但我没有找到任何一个问题能够解释像这样的案例

>>> d3 = {0: ['mo', 'A', 'la'], 1: ['tel', 'A', 'Al'], 2: ['Jak', 'E', 'Pum']}
>>> d4 = {'ko' : 'Paul', 'la' : 'John', 'si' : 'Peter', 'Al' : 'Laura', 'gh' : 'Will'}
>>> taxa = []
>>> 
>>> for l in d3.values():
...     v = next((d4[item] for item in l if item in d4), 'Unknown')
...     taxa.append(v)
... 
>>> taxa
['John', 'Laura', 'Unknown']
将从传递的生成器表达式返回第一个匹配的元素。如果未找到任何内容,将返回
“未知”

这些可以组合在单一列表理解中:

>>> [next((d4[item] for item in l if item in d4), 'Unknown') for l in d3.values()]
['John', 'Laura', 'Unknown']

您还可以使用模块中的集合理解和


只是一个简短的说明<代码>如果我不在b4==-1中,则始终计算为
如果为False:
>>> from itertools import chain
>>> d4 = {'ko' : 'Paul', 'la' : 'John', 'si' : 'Peter', 'Al' : 'Laura', 'gh' : 'Will'}
>>> d3 = {0: ['mo', 'A', 'la'], 1: ['tel', 'A', 'Al'], 2: ['Jak', 'E', 'Pum']}
>>> d3keys = set(chain.from_iterable(d3.values()))
>>> {value if key in d3keys else 'unknown' for key, value in d4.items()}
{'Laura', 'John', 'unknown'}
>>> [value if key in d3keys else 'unknown' for key, value in d4.items()]
['unknown', 'unknown', 'unknown', 'Laura', 'John']