【问题标题】:Python : update value in nested dictonary after reading keys from listPython:从列表中读取键后更新嵌套字典中的值
【发布时间】:2017-04-21 19:18:57
【问题描述】:

从列表中读取键后,我需要更新字典中的值。 例如

d1 = {"sun":{"mon":"111"},"tue":{"wed":"222"},"thu":{"fri":{"sat":"333"}}} 和 l1 = ["thu","fri","sat"]。

这里我需要将d1["thu"]["fri"]["sat"]的值改为444

请告诉我如何编写一个以d1l1 和新值作为参数并返回更新后的字典的函数。

【问题讨论】:

  • 请告诉我们如何尝试解决这个问题,以及为什么您认为您的解决方案不起作用。
  • l1d1 是什么关系?如果您已经有了新的 value 参数,为什么 l1 需要包含在用于更新 d1 的函数中?

标签: python list dictionary data-structures


【解决方案1】:

你可以获得最后一个字典(你想要更新的)并更新它的值。使用reduce 函数非常简单

from functools import reduce

def update_dict(nested_dict, key, value):
    last_dict = reduce(lambda d, k: d[k], key[:-1], nested_dict)
    last_dict[key[-1]] = value

输出:

>>> d = {'a': {'b': 1, 'c': 2}}
>>> update_dict(d, ['a', 'b'], 2)
>>> d
{'a': {'b': 2, 'c': 2}}

【讨论】:

    【解决方案2】:

    或者你可以创建一个新的字典并用它来更新原来的字典

    def create_update_dict(keys, val):
        if len(keys) == 1:
            return {keys[0]: val}
        else:
            return {keys[0]: create_update_dict(keys[1:], val)}
    
    def update_dict_val(d, val, keys):
        update_dict = create_update_dict(keys, val)
        d.update(update_dict)
        return d
    

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      相关资源
      最近更新 更多