使用列表推导和简单的 for 循环,您可以做到这一点:
鉴于这些词典:
firstServ = {"md5Hash1":"path1", "md5Hash2":"path2", "md5Hash3":"path3"}
secondServ = {"md5Hash1":"path4", "md5Hash4":"path2", "md5Hash5":"path5"}
提取密钥:
firstServKeys = set(firstServ.keys())
secondServKeys = set(secondServ.keys())
firstServ 独有的键
从 firstServKeys 中减去 secondServKeys
uniqueKeysInFirstServ = firstServKeys.difference(secondServKeys)
secondServ 独有的键
从 secondServKeys 中减去 firstServKeys
uniqueKeysInSecondServ = secondServKeys.difference(firstServKeys)
两个字典中存在不同键的值
将两个映射从 {hash:path} 反转为 {path:hash},然后对于 inv_festServ 中的所有路径,查找 inv_festServ 是否也有,如果它们的哈希不同则保留。
inv_festServ = {v: k for k, v in firstServ.items()} # Inverting keys and values
inv_secondServ = {v: k for k, v in secondServ.items()} # Inverting keys and values
valuesWithDifferentkeys = [v for v in list(inv_festServ.keys())
if v in inv_secondServ.keys() and inv_secondServ[v] != inv_festServ[v]]
两个字典中存在不同值的键
将 firstServKeys 和 secondServKeys 相交以获得所有公共密钥,这样我们就可以处理较小的集合
然后对于每个键,如果值不同,则保留
keysWithDifferentValues = [k for k in firstServKeys.intersection(secondServKeys)
if firstServ[k] != secondServ[k]]
打印出来:
print("Keys unique to first server:")
print(uniqueKeysInFirstServ)
print("Keys unique to second server:")
print(uniqueKeysInSecondServ)
print("Values present in both servers but with a different key:")
print(valuesWithDifferentkeys)
print("Keys present in both servers but with a different value:")
print(keysWithDifferentValues)
输出
Keys unique to first server:
{'md5Hash2', 'md5Hash3'}
Keys unique to second server:
{'md5Hash5', 'md5Hash4'}
Values present in both servers but with a different key:
['path2']
Keys present in both servers but with a different value:
['md5Hash1']