【问题标题】:Comparing List against Dict - return key if value matches list比较 List 和 Dict - 如果值匹配列表则返回键
【发布时间】:2017-02-05 19:29:30
【问题描述】:

这是 Python 3.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(键),而不是返回匹配的值

【问题讨论】:

  • 我编辑了我的问题 - 3.6 是版本
  • 小心,for item in champ_dict.items() and champ_ids: 没有做你认为它在做的事情。

标签: python dictionary


【解决方案1】:

请注意,问题中的这段代码没有在做你想象的事情:

for item in champ_dict.items() and champ_ids:

上面检查item是否在字典和列表中(这不是inand在Python中的工作方式!)。它只是遍历champ_ids 列表,仅此而已。试试这个:

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]

上面将比较字典中的每个 value,如果它存在于列表中,它将相应的 key 添加到输出列表中。例如,这是问题中测试数据的输出:

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

现在您可以根据需要使用它,print() 如果需要。

【讨论】:

  • nitpick:解压for k,v in some_dict.items() 比索引元组更好。
  • @juanpa.arrivillaga 当然!我忘记了。谢谢!
  • 这似乎可行,但很好奇为什么它比 TheEpicMelon 下面给出的更好的解决方案更容易理解 IMO?
  • @MingyJ 在 Python 中我们更喜欢使用list comprehensions(我在我的解决方案中使用的功能)而不是显式循环,理解不仅更惯用,而且更快。此外,在循环中打印内容不是一个好主意,最好创建一个包含答案的列表,然后将其传递给进一步处理
  • @MingyJ 总是我的荣幸 :) 玩得开心!
【解决方案2】:

首先,您需要将字符串作为字典中的键

{"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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多