gpt4 book ai didi

python - 深入到嵌套字典的几个层次(可能不存在)

转载 作者:行者123 更新时间:2023-11-28 21:51:06 25 4
gpt4 key购买 nike

我调用了一个返回字典的 API。该词典的一部分本身就是另一本词典。在那个内部字典中,有些键可能不存在,也可能存在。这些键可以引用另一个字典。

举个例子,假设我有以下词典:

dict1 = {'a': {'b': {'c':{'d':3}}}}
dict2 = {'a': {'b': {''f': 2}}}

我想编写一个可以在字典中传递的函数,以及一个可以将我引导至 3 的键列表。在 dict1 , 和 2dict2 .但是,有可能 bc可能不存在于 dict1 中, 和 bf可能不存在于 dict2 中.

我想要一个可以这样调用的函数:

get_value(dict1, ['a', 'b', 'c'])

这将返回 3,或者如果未找到键,则返回默认值 0。

我知道我可以使用这样的东西:

val = dict1.get('a', {}).get('b', {}).get('c', 0)

但这对我来说似乎很罗嗦。

我也可以将字典展平(参见 https://stackoverflow.com/a/6043835/1758023 ),但这可能有点密集,因为我的字典实际上相当大,并且在某些键中有大约 5 层嵌套。而且,我只需要从字典中得到两件事。

现在我正在使用 flattenDict在 SO 问题中发挥作用,但这对我的情况来说似乎有点矫枉过正。

最佳答案

您可以使用递归函数:

def get_value(mydict, keys):
if not keys:
return mydict
if keys[0] not in mydict:
return 0
return get_value(mydict[keys[0]], keys[1:])

如果键不仅可以丢失,而且可以是其他非字典类型,您可以这样处理:

def get_value(mydict, keys):
if not keys:
return mydict
key = keys[0]
try:
newdict = mydict[key]
except (TypeError, KeyError):
return 0
return get_value(newdict, keys[1:])

关于python - 深入到嵌套字典的几个层次(可能不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872209/

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