将Python字典与列表作为值进行比较
我正在为Steam编写一个解析器机器人,它将跟踪Steam用户的库存中哪些项目的来去。我编写了一个代码,获取用户的所有项目,并以带有嵌套列表的字典的形式返回,其中KEY=user NAME,VALUE=ITEM NAME及其数量。现在我需要比较Data1和Data2(更新的数据) 例如,一个新项目出现在Data2中,我需要将其写入第三个字典,保留密钥。如果项目离开Data2(这意味着这些项目不再在用户的库存中),则必须执行相同的操作 使用将Python字典与列表作为值进行比较,python,list,dictionary,steam,Python,List,Dictionary,Steam,我正在为Steam编写一个解析器机器人,它将跟踪Steam用户的库存中哪些项目的来去。我编写了一个代码,获取用户的所有项目,并以带有嵌套列表的字典的形式返回,其中KEY=user NAME,VALUE=ITEM NAME及其数量。现在我需要比较Data1和Data2(更新的数据) 例如,一个新项目出现在Data2中,我需要将其写入第三个字典,保留密钥。如果项目离开Data2(这意味着这些项目不再在用户的库存中),则必须执行相同的操作 使用集合 result_addition = {d:list(
集合
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': []}
您是否在同一数据字典中为单个用户提供了重复的库存项目?@chsws是的,我有重复的元素,但另一个函数处理它们并将所有重复项返回到int
[('AK-47',3)]
3-显示项目的数量。通过“新建项目”,您是否会包括元组中的数字是否增加?如果接受下面的答案,我想不会吧?
Result = {
'user1': [('M4A4', 1)],
'user2': [('GLOCK-18', 1)]
}
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': []}
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)