gpt4 book ai didi

python - 获取嵌套字典值的安全方法

转载 作者:IT老高 更新时间:2023-10-28 21:07:36 24 4
gpt4 key购买 nike

我有一个嵌套字典。只有一种方法可以安全地获取值(value)吗?

try:
example_dict['key1']['key2']
except KeyError:
pass

或者也许 python 有一个类似 get() 的方法用于嵌套字典?

最佳答案

你可以使用 get 两次:

example_dict.get('key1', {}).get('key2')

如果 key1key2 不存在,这将返回 None

请注意,如果 example_dict['key1'] 存在但不是 dict(或带有 的类似 dict 的对象),这仍然可能引发 AttributeError获取 方法)。如果 example_dict['key1'] 不可订阅,您发布的 try..except 代码会引发 TypeError

另一个区别是 try...except 在第一个丢失的键之后立即短路。 get 调用链没有。


如果您希望保留语法 example_dict['key1']['key2'] 但不希望它引发 KeyErrors,那么您可以使用 Hasher recipe :

class Hasher(dict):
# https://stackoverflow.com/a/3405143/190597
def __missing__(self, key):
value = self[key] = type(self)()
return value

example_dict = Hasher()
print(example_dict['key1'])
# {}
print(example_dict['key1']['key2'])
# {}
print(type(example_dict['key1']['key2']))
# <class '__main__.Hasher'>

请注意,当缺少键时,这会返回一个空的哈希器。

由于 Hasherdict 的子类,因此您可以像使用 dict 一样使用 Hasher。所有相同的方法和语法都可用,Hashers 只是以不同的方式处理丢失的键。

您可以像这样将常规 dict 转换为 Hasher:

hasher = Hasher(example_dict)

并将 Hasher 转换为常规 dict 也同样简单:

regular_dict = dict(hasher)

另一种选择是在辅助函数中隐藏丑陋:

def safeget(dct, *keys):
for key in keys:
try:
dct = dct[key]
except KeyError:
return None
return dct

因此您的其余代码可以保持相对可读性:

safeget(example_dict, 'key1', 'key2')

关于python - 获取嵌套字典值的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25833613/

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