【问题标题】:How to dynamically move inside a nested dict in Python如何在 Python 中的嵌套字典内动态移动
【发布时间】:2014-05-27 19:17:30
【问题描述】:

我有一个字典,其中包含动态数量的嵌套字典,例如:

my_dict = {"a": {"b": {"c: {...}}}}

我需要在这个字典中动态移动,例如我想做以下事情:

levels = ["a", "b", "c"]
my_dict[levels[0]][levels[1]][levels[2]] = "something"

“级别”内的项目数量可能会有所不同。

通过编写如下代码,我可以在“关卡”内为有限数量的项目部分实现相同的结果:

if len(levels) == 1:
    my_dict[levels[0]] = "something"
elif len(levels) == 2:
    my_dict[levels[0]][levels[1]] = "something"
elif len(levels) == 3:
    my_dict[levels[0]][levels[1]][levels[2]] = "something"
(...)

但我正在寻找更通用、更优雅的解决方案。

有没有办法做到这一点?

【问题讨论】:

    标签: python dictionary nested


    【解决方案1】:

    这里没有很多代码可以继续,但是对于你给出的,你可以定义

    def get(d, keys):
        for key in keys:
            d = d[key]
        return d
    
    def set(d, keys, value):
        d = get(d, keys[:-1])
        d[keys[-1]] = value
    

    然后像这样使用它

    my_dict = {"a":{"b":{"c":{}}}}
    set(my_dict, ["a", "b", "c"], "something")
    print get(my_dict, ["a", "b", "c"])
    

    get 的功能替代方案:

    def get(d, keys):
        return reduce(lambda d, key: d[key], keys, d)
    

    【讨论】:

    • 谢谢,它运行良好。我自己尝试过类似的解决方案,但我错过了 set 函数的“-1”。
    猜你喜欢
    • 2018-09-21
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2018-06-02
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多