首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Python字典与列表作为值进行比较

将Python字典与列表作为值进行比较
EN

Stack Overflow用户
提问于 2021-05-25 12:26:35
回答 2查看 69关注 0票数 2

我正在为蒸汽编写一个解析器机器人,它将跟踪从蒸汽用户的库存中进出的物品。我编写了一个代码,它获取用户的所有项,并以字典的形式返回,其中KEY =用户名、VALUE = ITEM名称及其数量,现在需要比较Data1和Data2 (更新的数据)。

代码语言:javascript
复制
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,也必须这样做(这意味着这些项目不再存在于用户的库存中)。

代码语言:javascript
复制
Result = {
              
            'user1': [('M4A4', 1)], 
            'user2': [('GLOCK-18', 1)] 

        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-25 12:38:26

使用sets

代码语言:javascript
复制
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': []}
票数 1
EN

Stack Overflow用户

发布于 2021-05-25 12:45:03

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67687892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档