【问题标题】:Compare Python dictionary with list as value将 Python 字典与列表作为值进行比较
【发布时间】:2021-05-25 12:26:35
【问题描述】:

我正在为 Steam 编写一个解析器机器人,它将跟踪哪些物品来自 Steam 用户的库存。我编写了一个代码,它获取所有用户的项目并以带有嵌套列表的字典的形式返回,其中 KEY = USER NAME, VALUE = ITEM NAME AND ITS QUANTITY。 现在我需要比较 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)] 

        }

【问题讨论】:

  • 同一个数据字典中的单个用户是否有重复的库存项目?
  • @chsws 是的,我有重复的元素,但另一个函数会处理它们并将所有重复项返回到 int [('AK-47', 3)] 3 - 显示项目数。
  • 通过新项目,如果数字在元组中增加,你会包括吗?考虑到以下答案的接受,我认为不会?

标签: python list dictionary steam


【解决方案1】:

使用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': []}

【讨论】:

    【解决方案2】:
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多