比较2个字典值列表,不管python中的相同键

时间:2017-06-20 09:28:00

标签: python dictionary comparison

我有2个字典,比如说

dict1 = {'a': ['xxx', 'yyy', 'zzz'], 'b': ['xxx', 'ab', 'ac', 'ed']}
dict2 = {1: ['fgh', 'yyy', 'iy'], 2: ['xxx', 'ax', 'ac', 'yyy']}

我想将字典的每个键的每个值与其他字典进行比较,并返回匹配值的数量。

例如,如果我将词典 dict1 的键&#39; a&#39; 的值与字典 dict2 进行比较,它应该将计数作为&#39; 1&#39; &#39; 2&#39; 返回,因为值&#39; yyy&#39;使用&#39; 1&#39; 和值&#39; xxx&#39; &#匹配 dict2 39; yyy&#39; dict2 匹配&#39; 2&#39; 。同样在下一次迭代中,我应该将字典 dict1 的键&#39; b&#39; 的值与字典 dict2 值<进行比较/ p>

我可以知道,如何做这个python

2 个答案:

答案 0 :(得分:0)

这是你在找什么?

dict1 = {'a': ['xxx', 'yyy', 'zzz'], 'b': ['xxx', 'ab', 'ac', 'ed']}
dict2 = {1: ['fgh', 'yyy', 'iy'], 2: ['xxx', 'ax', 'ac', 'yyy']}

dict3 = {k: [len(set(v) & set(l)) for l in dict2.values()] for k, v in dict1.items()}
print(dict3)  # {'a': [1, 2], 'b': [0, 2]}

请注意,由于字典不关心订单,因此无法保证订单。所以结果也可能是{'a': [2, 1], 'b': [0, 2]}例如..

也许这种变化更好:

dict3 = {k: {subk: len(set(v) & set(subv)) for subk, subv in dict2.items()} for k, v in dict1.items()}
print(dict3)  # {'a': {1: 1, 2: 2}, 'b': {1: 0, 2: 2}}
#                 ^key of dict1 ^         ^
#                               |         |key of dict2
#                               |count

答案 1 :(得分:0)

你走了:

dict1 = {'a': ['xxx', 'yyy', 'zzz'], 'b': ['xxx', 'ab', 'ac', 'ed']}
dict2 = {1: ['fgh', 'yyy', 'iy'], 2: ['xxx', 'ax', 'ac', 'yyy']}

results = {}

for key1 in dict1:
    results[key1] = set()  # create a new entry for each dict1's key
    for value in dict1[key1]:
        for key2 in dict2:
            if value in dict2[key2]:
                results[key1].add(key2)  # store key2 if value match

print(results)  # {'b': {2}, 'a': {1, 2}}