在给定索引和值列表的嵌套python字典中设置值

2024-06-01 05:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

很抱歉,如果这个问题以前已经回答过-我一直在寻找解决方案,但我可能没有使用正确的搜索词。

无论如何,我要做的是以编程方式在字典中设置一个值,可能是嵌套的,给定一个索引列表和一个值。

例如,假设我的索引列表是:

['person', 'address', 'city'] 

价值是

'New York'

因此,我想要一个dictionary对象,比如:

{ 'Person': { 'address': { 'city': 'New York' } }

基本上,该列表表示嵌套字典的“路径”。

我想我可以自己构造字典,但我遇到的困难是如何设置值。很明显,如果我只是手动编写代码的话:

dict['Person']['address']['city'] = 'New York'

但是,如果我只有一个索引和值的列表,我如何索引到字典中并以编程方式设置类似的值呢?

希望这是有意义的,不是太愚蠢的问题。。。:)谢谢你的帮助。


Tags: 对象路径city列表newdictionary字典address
3条回答

首先,你可能想看看setdefault

作为一个函数,我会把它写成

def get_leaf_dict( dict, key_list):
    res=dict
    for key in key_list:
        res=dict.setdefault( key, {} )
    return res

这将用作:

get_leaf_dict( dict, ['Person', 'address', 'city']) = 'New York'

这可以通过错误处理等方法来清除,也可以使用*args而不是使用单个键列表参数;但其思想是 您可以遍历键,在每个级别上提取适当的字典。

还有一个选择:

from collections import defaultdict
recursivedict = lambda: defaultdict(recursivedict)
mydict = recursivedict()

我最初是从这里得到这个的:https://stackoverflow.com/a/10218517/1530754

如果你问我的话,我觉得很聪明很优雅。

像这样的事情可能会有帮助:

def nested_set(dic, keys, value):
    for key in keys[:-1]:
        dic = dic.setdefault(key, {})
    dic[keys[-1]] = value

你可以这样使用它:

>>> d = {}
>>> nested_set(d, ['person', 'address', 'city'], 'New York')
>>> d
{'person': {'address': {'city': 'New York'}}}

相关问题 更多 >