Python 将列表与Dict进行比较-如果值与列表匹配,则返回键

Python 将列表与Dict进行比较-如果值与列表匹配,则返回键,python,dictionary,Python,Dictionary,这是Python3.6 我需要帮助比较一个列表和一个字典,如果有匹配,我需要返回字典键 champ_ids = [0, 36, 85] champ_dict = {Bob : 0, Carly: 36, Freddy : 85, Megan : 14, Dilbert : 69} for item in champ_dict.items() and champ_ids: print(item) 这会打印所有匹配的数字,所以在这个例子中,0,36,85是完美的。如果在两个位置都找到了

这是Python3.6

我需要帮助比较一个列表和一个字典,如果有匹配,我需要返回字典键

champ_ids = [0, 36, 85]

champ_dict = {Bob : 0, Carly: 36, Freddy : 85, Megan : 14, Dilbert : 69}

for item in champ_dict.items() and champ_ids:
    print(item)

这会打印所有匹配的数字,所以在这个例子中,0,36,85是完美的。如果在两个位置都找到了这些值,我如何使其返回Bob、Carly、Freddy密钥,而不是返回匹配的值请注意,问题中的代码并不是按照您的想象执行的:

for item in champ_dict.items() and champ_ids:
上面没有检查该项是否同时在字典和列表中,而不是如何在Python中工作!。它只是在champ_id列表上进行迭代,仅此而已。请尝试以下方法:

champ_ids  = [0, 36, 85]
champ_dict = {'Bob' : 0, 'Carly': 36, 'Freddy' : 85, 'Megan' : 14, 'Dilbert' : 69}
[k for k, v in champ_dict.items() if v in champ_ids]
上面将比较字典中的每个值,如果列表中存在该值,则将相应的键添加到输出列表中。例如,这是问题中测试数据的输出:

['Freddy', 'Bob', 'Carly']

现在,您可以根据需要使用它,如果需要,可以打印它。

请注意,问题中的这段代码并不像您想象的那样:

for item in champ_dict.items() and champ_ids:
上面没有检查该项是否同时在字典和列表中,而不是如何在Python中工作!。它只是在champ_id列表上进行迭代,仅此而已。请尝试以下方法:

champ_ids  = [0, 36, 85]
champ_dict = {'Bob' : 0, 'Carly': 36, 'Freddy' : 85, 'Megan' : 14, 'Dilbert' : 69}
[k for k, v in champ_dict.items() if v in champ_ids]
上面将比较字典中的每个值,如果列表中存在该值,则将相应的键添加到输出列表中。例如,这是问题中测试数据的输出:

['Freddy', 'Bob', 'Carly']

现在,您可以根据需要使用它,如果需要,可以打印它。

首先,您需要在字典中使用字符串作为键

{"Bob" : 0, "Carly" : 36, "Freddy" : 85, "Megan" : 14, "Dilbert" : 69}
还有,为什么不使用id作为键而不是名称, 那会好一点

但代码如下:

for k, v in champ_dict.items():
    if v in champ_ids:
        print(k)

首先,您需要在字典中使用字符串作为键

{"Bob" : 0, "Carly" : 36, "Freddy" : 85, "Megan" : 14, "Dilbert" : 69}
还有,为什么不使用id作为键而不是名称, 那会好一点

但代码如下:

for k, v in champ_dict.items():
    if v in champ_ids:
        print(k)

我编辑了我的问题-3.6是版本小心,因为champ_dict中的项目。项目和champ_ID:没有做你认为它正在做的事情。我编辑了我的问题-3.6是版本小心,因为champ_dict中的项目。项目和champ_ID:没有做你认为它正在做的事情。挑剔:最好为k解包,在某些习惯用法中,v比索引元组更有用。@juanpa.arrivillaga当然!我忘了。谢谢这似乎是可行的,但奇怪的是,为什么这是一个比下图更好的解决方案,IMO更容易理解?@MingyJ在Python中,我们更喜欢使用我在解决方案中使用的功能,而不是显式循环,理解不仅更地道,而且更快。此外,在循环中打印内容也不是一个好主意,最好创建一个包含答案的列表,然后将其传递给其他人,以便进一步了解processing@MingyJ永远是我的荣幸:玩得开心!吹毛求疵:在某些dict.items习惯用法中,最好将k,v解包,而不是索引元组。@juanpa.arrivillaga当然!我忘了。谢谢这似乎是可行的,但奇怪的是,为什么这是一个比下图更好的解决方案,IMO更容易理解?@MingyJ在Python中,我们更喜欢使用我在解决方案中使用的功能,而不是显式循环,理解不仅更地道,而且更快。此外,在循环中打印内容也不是一个好主意,最好创建一个包含答案的列表,然后将其传递给其他人,以便进一步了解processing@MingyJ永远是我的荣幸:玩得开心!