比较新旧两个CMDB库,列出要删除的编号,要更新的编号,要添加的编号。

本文介绍了一种通过对比两个字典来找出需要更新、删除和添加的条目方法。使用Python set集合操作来高效地确定数据变化,适用于配置管理或资产库存同步场景。

主要用到的set里的功能

# 数据库中原有
old_dict = {
"#1": {'hostname': c1, 'cpu_count': 2, 'mem_capicity': 80},
"#2": {'hostname': c1, 'cpu_count': 2, 'mem_capicity': 80},
"#3": {'hostname': c1, 'cpu_count': 2, 'mem_capicity': 80}
}

# cmdb 新汇报的数据
new_dict = {
"#1": {'hostname': c1, 'cpu_count': 2, 'mem_capicity': 800},
"#3": {'hostname': c1, 'cpu_count': 2, 'mem_capicity': 80},
"#4": {'hostname': c2, 'cpu_count': 2, 'mem_capicity': 80}
}
要求得到三个列表:
要更新的数据
要删除的数据列表
要添加的数据列表

old_dict = {
    "#1":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
    "#2":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
    "#3":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 }
}
new_dict = {
    "#1":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 800 },
    "#3":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
    "#4":{ 'hostname': 'c2', 'cpu_count': 2, 'mem_capicity': 80 }
}
# print(old_dict)
# print(new_dict)
updatelist = [] #要更新的数据列表
dellist = [] #要删除的数据列表
addlist = [] #要添加的数据列表
oldset = set(old_dict.keys()) #将old_dic赋值给oldset
newset = set(new_dict.keys())
dellist = oldset.difference(new_dict.keys()) #旧的有,新的没有,表示要删除的数据
print(dellist)
addlist = newset.difference(old_dict.keys()) #新的有,就的没有,表示要添加的数据
print(addlist)
for i in new_dict.keys():
    if i in old_dict.keys():
        oldhard = set(old_dict[i].values())
        newhard = set(new_dict[i].values())
        if oldhard.issubset(newhard):  #比较两个set是否一样。
            pass
        else:
            updatelist = [i]

print(dellist,addlist,updatelist)

  

转载于:https://www.cnblogs.com/jack410/p/6464236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值