匹配两个字典之间的值,在新字典中提取等于值的键

时间:2020-02-23 21:11:25

标签: python

例如,我有:

dict1 = {"name":"Cristian","surname":"Rossi","nationality":"Italy","color":"red"}
dict2 = {"country":"Italy","loc":"Milan","other":"red","car":"ford"}

词典很大,有数千个元素。 在此示例中,两个词典中的值都是义大利和红色。所以,我会得到这个结果

dict3 = {"nationality":"country","color":"other"}

将字典转换为集合可能更容易? 谢谢!

2 个答案:

答案 0 :(得分:1)

获取两个词典中的一组通用值。然后获取这些值的键并建立字典。

dict1 = {"name":"Cristian","surname":"Rossi","nationality":"Italy","color":"red"}
dict2 = {"country":"Italy","loc":"Milan","other":"red","car":"ford"}

common = set(dict1.values()) & set(dict2.values())
keys1 = [k for k,v in dict1.items() if v in common]
keys2 = [k for k,v in dict2.items() if v in common]

d = {k1:k2 for k1,k2 in zip(keys1, keys2)}
print(d)

输出:

{'nationality': 'country', 'color': 'other'} 

答案 1 :(得分:0)

这是一种首先反转dict然后查看值的交集的方法。给定值的交集,然后使用每个键在原始字典中映射到的所有键构建最终结果。假设使用Python 3。

d1 = {"name":"Cristian","surname":"Rossi","nationality":"Italy","color":"red"}
d2 = {"country":"Italy","loc":"Milan","other":"red","car":"ford"}

def inv_dict(d):
    inv = {}
    for k, v in d.items():
        inv.setdefault(v, []).append(k)
    return inv

id1 = inv_dict(d1)
id2 = inv_dict(d2)
result = {v:id1[v] + id2[v] for v in id1.keys() & id2.keys()} 

print(result)
# {'Italy': ['nationality', 'country'], 'red': ['color', 'other']}

输出与您指定的输出略有不同,但是尚不清楚如果一个或两个字典的多个键中出现相同的值,示例输出的工作方式。