gpt4 book ai didi

python - 使用键字符串列表作为路径添加到字典

转载 作者:太空狗 更新时间:2023-10-29 20:17:10 25 4
gpt4 key购买 nike

我有以下命令:

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

第二个字典:

aSecondDict = { 
"d1" : {},
"d2" : {},
"d3" : {},
}

和一个“路径”元组:

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

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

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

实现这一目标的 pythonic 方法是什么?

最佳答案

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

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

如果你愿意,你甚至可以变得更聪明一点:

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

我想应该注意的是,这两种方法略有不同。后者强制 aDict 只包含更多的词典(或 dict 子类),而前者允许任何具有 __getitem__ 方法的东西都在 字典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 中被删除

关于python - 使用键字符串列表作为路径添加到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com