我想比较两个特定的词典:
dict1 = {"person1": {
"name": "toto",
"age": 24
},
"person2": {
"name": "titi",
"age": 24}
}
dict2 = {"person2": {
"name": "tata",
"age": 22
},
"person3": {
"name": "tete",
"age": 25}
}
我想比较一下之间的区别: -person1,person2(dict1)和person2,person3(dict2) -如果person2相同,则比较姓名和年龄(如果不相同)
我已经比较了第一个键,但是没有比较第二个键值。
dict1是真正的词典:
def not_matches(dict_one, dict_two):
dict_one = set(dict_one)
dict_two = set(dict_two)
ldel, ladd = list(dict_two - dict_one), list(dict_one - dict_two)
return ldel, ladd
list_delete = list()
list_add = list()
list_delete, list_add = not_matches(dict1, dict2)
print(list_delete)
print(list_add)
['person3']
['person1']
答案 0 :(得分:1)
尝试这种方式:
for k1, v1 in dict1.items():
v2 = dict2.get(k1, None)
if v2:
print(k1, '---- found:')
print(v1['name'], v2['name'])
print(v1['age'], v2['age'])
添加自定义以比较嵌套键。
set
类:
keys1 = set(dict1.keys())
keys2 = set(dict2.keys())
print(keys1 - keys2) #=> {'person1'}
print(keys2 - keys1) #=> {'person3'}
print(keys1 & keys2) #=> {'person2'}
因此上述代码可以更改为:
for k in keys2 & keys1:
d1, d2 = dict1[k], dict2[k]
print ( (d1['name'] == d2['name']) & (d1['age'] == d2['age']))