Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个字典中的值列表,而不考虑python中相同的键_Python_Dictionary_Comparison - Fatal编程技术网

比较两个字典中的值列表,而不考虑python中相同的键

比较两个字典中的值列表,而不考虑python中相同的键,python,dictionary,comparison,Python,Dictionary,Comparison,比如说,我有两本字典 dict1 = {'a': ['xxx', 'yyy', 'zzz'], 'b': ['xxx', 'ab', 'ac', 'ed']} dict2 = {1: ['fgh', 'yyy', 'iy'], 2: ['xxx', 'ax', 'ac', 'yyy']} 我想将字典中每个键的每个值与其他字典进行比较,并返回匹配值的数量 例如,如果我将dictionarydict1的键“a”的值与dictionarydict2进行比较,它应该将计数返回为“1”、“2”,因为值“

比如说,我有两本字典

dict1 = {'a': ['xxx', 'yyy', 'zzz'], 'b': ['xxx', 'ab', 'ac', 'ed']}
dict2 = {1: ['fgh', 'yyy', 'iy'], 2: ['xxx', 'ax', 'ac', 'yyy']}
我想将字典中每个键的每个值与其他字典进行比较,并返回匹配值的数量

例如,如果我将dictionarydict1的键“a”的值与dictionarydict2进行比较,它应该将计数返回为“1”、“2”,因为值“yyy”与dict2与键“1”匹配,值“xxx”和“yyy”与dict2与键“2”匹配。类似地,在下一次迭代中,我应该将dictionarydict1的键“b”的值与dictionarydict2的值进行比较


我可以知道,如何使用python吗?这就是您要找的吗

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
给你:

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

您的意思是“…因为value
'yyy'
与dict2匹配…”,对吗?到目前为止,您在这个问题上做了哪些尝试?你知道如何检查两个列表是否有任何共同的条目吗?你也不能使用int作为键…@LismUK你可以,但不能使用这个语法这正是我在找你的原因。谢谢,漂亮的一行!效率肯定会提高,但可读性较差。