使用关键字字符串列表作为路径添加到dict

2024-10-01 09:19:20 发布

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

我有一句话:

aDict = {
    "a" : {
        "b" : {
            "c1" : {},
            "c2" : {},
        }
    }
}

第二句话:

^{pr2}$

以及“路径”元组:

path = ( "a", "b", "c2" )

现在我想在元组提供的路径上将第二个dict添加到第一个dict:

aResultDict = {
    "a" : {
        "b" : {
            "c1" : {},
            "c2" : {
                "d1" : {},
                "d2" : {},
                "d3" : {},
            },
        }
    }
}

Python的方法是什么?在


Tags: path方法路径dictd2d1元组d3
1条回答
网友
1楼 · 发布于 2024-10-01 09:19:20

您可以使用reduce1获取字典,dict.update将新内容放入其中:

reduce(lambda d,key: d[key],path,aDict).update(aSecondDict)

如果你想的话,你甚至可以变得更聪明一点:

^{pr2}$

我想应该指出的是,这两种方法略有不同。后者强制aDict只包含更多的字典(或dict子类),而前者允许__getitem__方法位于aDict中。As noted in the comments,您还可以使用:

reduce(dict.get,path,aDict).update(aSecondDict)

但是,如果您尝试在路径中遍历一个不存在的“链接”,而不是KeyError,那么这个版本将引发一个AttributeError,因此我不太喜欢它。此方法还强制路径上的每个值都是dictdict子类。在

1reduce是python2.x的内置版本。从python2.6开始,它也可以作为functools.reduce提供。希望与python3.x兼容的代码应该尝试使用functools.reduce,因为python3.x中的内置项被删除了

相关问题 更多 >