1 #寻找差异 2 #要求:原来没有的,新加入;原来有的,更新;新的没有,原来的有,删除原来的 3 #无需考虑内部元素改变 4 #数据库中原有 5 old_dict = { 6 "#1":{ "hostname":"c1", "cpu_count": 2, "mem_capicity": 80 }, 7 "#2":{ "hostname":"c1", "cpu_count": 2, "mem_capicity": 80 }, 8 "#3":{ "hostname":"c1", "cpu_count": 2, "mem_capicity": 80 } 9 } 10 11 #cmdb 新汇报的数据 12 new_dict = { 13 "#1":{ "hostname":"c1", "cpu_count": 2, "mem_capicity": 800 }, 14 "#3":{ "hostname":"c1", "cpu_count": 2, "mem_capicity": 80 }, 15 "#4":{ "hostname":"c2", "cpu_count": 2, "mem_capicity": 80 } 16 } 17 18 old = set(old_dict.keys()) 19 new = set(new_dict.keys()) 20 update_set = old.intersection(new) #交集,输出更新的数据 21 delete_set = old.symmetric_difference(update_set) #差集,新的没有,旧的有的,删除 22 add_set = new.symmetric_difference(update_set) #差集,新的有,旧的没有,添加 23 print(update_set) 24 print(delete_set) 25 print(add_set) 26 old_dict.pop("#2") 27 old_dict.update(new_dict) 28 print(old_dict)
#执行结果:
{'#1', '#3'}
{'#2'}
{'#4'}
{'#4': {'mem_capicity': 80, 'hostname': 'c2', 'cpu_count': 2}, '#3': {'mem_capicity': 80, 'hostname': 'c1', 'cpu_count': 2}, '#1': {'mem_capicity': 800, 'hostname': 'c1', 'cpu_count': 2}}