我正在为蒸汽编写一个解析器机器人,它将跟踪从蒸汽用户的库存中进出的物品。我编写了一个代码,它获取用户的所有项,并以字典的形式返回,其中KEY =用户名、VALUE = ITEM名称及其数量,现在需要比较Data1和Data2 (更新的数据)。
Data1 = {
'user1': [('AWP', 1), ('DEAGLE', 2), ('AK-47', 3)],
'user2': [('MP-7', 1), ('KNIFE', 1), ('GLOVES', 1)]
}
Data2 = {
'user1': [('AWP', 1), ('DEAGLE', 2), ('AK-47', 3), ('M4A4', 1)],
'user2': [('MP-7', 1), ('KNIFE', 1), ('GLOVES', 1), ('GLOCK-18', 1)]
}例如,Data2中出现了一个新项,我需要将它写到第三个字典中,保留键。如果项目离开Data2,也必须这样做(这意味着这些项目不再存在于用户的库存中)。
Result = {
'user1': [('M4A4', 1)],
'user2': [('GLOCK-18', 1)]
}发布于 2021-05-25 12:38:26
使用sets
result_addition = {d:list(set(Data2[d]) - set(Data1[d])) for d in Data2.keys()}
print(result_addition)
>> {'user1': [('M4A4', 1)], 'user2': [('GLOCK-18', 1)]}
result_missing = {d:list(set(Data1[d]) - set(Data2[d])) for d in Data2.keys()}
print(result_missing )
>> {'user1': [], 'user2': []}发布于 2021-05-25 12:45:03
def dict_diff(dict_1, dict_2):
keys = set(dict_1.keys()).union(set(dict_2.keys()))
result = {}
for key in keys:
if key not in Data1:
result[key] = Data2[key]
continue
if key not in Data2:
result[key] = Data1[key]
continue
diff1 = set(Data2[key]).difference(set(Data1[key]))
diff2 = set(Data1[key]).difference(set(Data2[key]))
result[key] = list(diff1.union(diff2))
return result
dict_diff(Data1, Data2)https://stackoverflow.com/questions/67687892
复制相似问题