【问题标题】:How to update a dictionary without having to create a new dictionary?如何在不创建新字典的情况下更新字典?
【发布时间】:2019-12-14 19:38:31
【问题描述】:

这个问题指定一个字典和一个整数列表作为参数传递给一个函数,该函数应该通过删除整数列表中的列表值中的整数元素来更新字典。在这种情况下,整数列表 [2, 5] 被传递并与字典值进行比较。

例如,给定字典:

1. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}

更新后:

2. {3: [3, 7, 4], 7: [6, 1], 2: [1, 8, 0], 8: [-3, 9]}

请注意,列表值已删除所有 2 和 5,因为整数列表 [2, 5] 是参数之一。

如果我不返回字典,它会返回 None,但我也不能直接返回原始字典,因为它返回完全相同的字典,没有删除整数。我还尝试创建一个新字典并使用 items 方法再次追加所有内容,但删除了一些整数,但这也没有返回更新的字典。

代码:

def main():
    a_dict = {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
    print("1.", a_dict)
    updated = update_corresponding_values(a_dict, [2, 5])
    print("2.", updated)

def update_corresponding_values(a_dict, list1):
    for value in a_dict.items():
        if value in list1:
            del a_dict[value]

main()

预期:

1. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}

2. {3: [3, 7, 4], 7: [6, 1], 2: [1, 8, 0], 8: [-3, 9]}

得到:(如果我返回一些东西)

1. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
2. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}

【问题讨论】:

  • a.update(dict(key=newvalue))

标签: python list dictionary append


【解决方案1】:

我认为您的update_corresponding_values 函数在几个方面不正确。例如,更新应该是None,给定函数什么都不返回,它只是改变a_dict 对象。其次,O 不要认为 if 语句会触发,因为 value 是一个元组 (key,value_list),所以它基本上是检查 key == [2,5]value_list == [2,5]

试试:

def update_corresponding_values(a_dict, list1):
    for key in a_dict.keys():
        new_list = []
        for value in a_dict[key]:
            if value in list1:
                continue
            new_list.append(value)
        a_dict[key] = new_list
    return a_dict

【讨论】:

    【解决方案2】:

    这样做怎么样,(用于澄清的长名称)

    def update_corresponding_values(a_dict, list1):
        for dic_key, list_in_dic in a_dict.items():
            a_dict[dic_key] = [x for x in list_in_dic if x not in list1]
        return a_dict
    

    【讨论】:

      【解决方案3】:

      在 python 中更新现有的字典(变异)很容易。

      >>> a = {'a': 1}
      >>> a
      {'a': 1}
      >>> a.update(dict(a=2))
      >>> a
      {'a': 2}
      

      如果key不存在,这个方法当然会添加key。

      >>> a.update(dict(b=1))
      >>> a
      {'a': 2, 'b': 1}
      

      【讨论】:

        【解决方案4】:

        IIUC,使用dict理解修改原来的a_dict并返回:

        def main():
            a_dict = {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
            print("1.", a_dict)
            updated = update_corresponding_values(a_dict, [2, 5])
            print("2.", updated)
        
        def update_corresponding_values(a_dict, list1):
            return {k: [i for i in v if i not in list1] for k, v in a_dict.items()}
        
        main()
        

        输出:

        1. {8: [-3, 9, 5], 2: [2, 1, 8, 0], 3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2]}
        2. {8: [-3, 9], 2: [1, 8, 0], 3: [3, 7, 4], 7: [6, 1]}
        

        【讨论】:

          猜你喜欢
          • 2021-08-17
          • 1970-01-01
          • 1970-01-01
          • 2019-12-31
          • 2022-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多