Python比较两个特定的字典

时间:2019-01-21 09:01:09

标签: python list dictionary compare

我想比较两个特定的词典:

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']

1 个答案:

答案 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']))