【问题标题】:Check if value of one dictionary is the key for the other检查一个字典的值是否是另一个字典的键
【发布时间】:2019-04-07 23:52:16
【问题描述】:

我基本上想检查一个字典中的值是否是另一个字典中的键。

例如,我有两本字典

a = {armani: jeans, dolce: gabbana}
b = {jeans: robo, jobs: versace}

我编写了代码来进行检查,以便它只获取另一个字典中的键值。所以在这种情况下,我只想显示{armani: robo},因为牛仔裤已经在两者中了。所以就像第二个字典中牛仔裤的值然后成为新的最终字典中的主要值

这是代码:

{k:v for k,v in a.items() if v in b.items()}

但它不起作用,我不知道如何检查该值是否是另一个列表中的键

【问题讨论】:

  • @MegaBluejay 所以我需要改变什么
  • 介意我问jeans: robo 代表什么?如果它是一个品牌,从来没有听说过机器人。

标签: python python-3.x dictionary


【解决方案1】:

这应该可行:

{k:b[v] for k,v in a.items() if v in b}

您只是缺少两个元素:

  1. 您不需要写 if v in b.items(),因为 Python 将 if v in b 解释为“如果 v 在 b 的键中”。
  2. 您需要将 k 映射到 v 本身,而不是映射到 b 中 v 的值,即 b[v]

【讨论】:

  • 但是它没有打印armani: robo。所以喜欢它应该提取牛仔裤的价值,然后将其替换为阿玛尼牛仔裤
  • 你的意思是它应该替换 a 中的值,还是应该生成一个新字典?
  • 就像我正在创建一个新字典,它采用第一个字典的键,所以 Armani 然后是 Jeans 的值(这是第二个字典的键)。在这种情况下,Jeans 的值为robo
  • 您可能还想在字典中的值周围加上引号,如下所示:a = {'armani': 'jeans', 'dolce': 'gabbana'}
【解决方案2】:

或者,您可以使用设置的交集进行过滤。

a = {'armani': 'jeans', 'dolce': 'gabbana'}
b = {'jeans': 'robo', 'jobs': 'versace'}
c = set(a.values()).intersection(b)
d = {k:b[k] for k in c}

# or as a one-liner
e = {k:b[k] for k in set(a.values()).intersection(b)}

这可能比遍历整个字典要快。

【讨论】:

  • 你用的是什么版本的 Python?
  • 我刚刚在 Python 2.7 和 Python 3.7 中测试了上面的代码,它工作正常。您可能必须在旧版本中执行以下操作: c = set(a.values()).intersection(set(b.keys()))
【解决方案3】:

我认为你需要:

a = {"armani": "jeans", "dolce": "gabbana"}
b = {"jeans": "robo", "jobs": "versace"}

res = {k1:v2 for k1,v1 in a.items() for k2,v2 in b.items() if v1 ==k2}

print(res)

输出:

{'armani': 'robo'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2014-09-16
    • 1970-01-01
    • 2012-03-08
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多