我有2个字典(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']


在d4的键中没有d3值的情况下,如果它可以在列表中返回“未知”,那就太好了。因此,这种情况下的理想结果是这样的:

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()将从传递的生成器表达式中返回第一个匹配的元素。如果未找到任何内容,将返回'Unknown'

这些可以合并为单个列表理解:

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

关于python - 遍历两个字典并在Python中获取列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34309082/

10-10 18:11
查看更多