Python:从列表中读取键后更新嵌套dictonary中的值

时间:2016-12-07 00:34:05

标签: python list dictionary data-structures

我需要在从列表中读取密钥后更新字典中的值。 e.g。

  

d1 =   {"太阳" {"周一":" 111"}"周二" {"星期三":& #34; 222"}"周四" {"周五" {"饱和":" 333"}}}   和l1 = [" thu"," fri"," sat"]。

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

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

2 个答案:

答案 0 :(得分:1)

或者您可以创建一个新的dict并使用它来更新原始的

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

答案 1 :(得分:0)

您可以获取最后一个dict(您想要更新)并更新其值。使用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}}