检查一个字典的值是否是另一个的键

时间:2019-04-07 23:52:16

标签: python python-3.x dictionary

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

例如,我有两个字典

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()}

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

3 个答案:

答案 0 :(得分:0)

这应该有效:

{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]

答案 1 :(得分:0)

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

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)}

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

答案 2 :(得分:0)

我认为您需要:

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'}