例如,我有:
dict1 = {"name":"Cristian","surname":"Rossi","nationality":"Italy","color":"red"}
dict2 = {"country":"Italy","loc":"Milan","other":"red","car":"ford"}
词典很大,有数千个元素。 在此示例中,两个词典中的值都是义大利和红色。所以,我会得到这个结果
dict3 = {"nationality":"country","color":"other"}
将字典转换为集合可能更容易? 谢谢!
答案 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']}
输出与您指定的输出略有不同,但是尚不清楚如果一个或两个字典的多个键中出现相同的值,示例输出的工作方式。