栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

您可以使用

get
两次:

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

None
如果存在
key1
key2
不存在,它将返回。

请注意,这仍然可以引发

AttributeError
if
example_dict['key1']
存在但不是dict(或带有
get
方法的类似dict的对象)。
try..except
如果发布的代码无法订阅,则会引发一个
TypeError
代替
example_dict['key1']

另一个区别是

try...except
在第一个丢失的键之后立即发生短路。
get
呼叫链没有。


如果您希望保留语法,

example_dict['key1']['key2']
但不希望它引发KeyErrors,则可以使用Hasher配方:

class Hasher(dict):    # https://stackoverflow.com/a/3405143/190597    def __missing__(self, key):        value = self[key] = type(self)()        return valueexample_dict = Hasher()print(example_dict['key1'])# {}print(example_dict['key1']['key2'])# {}print(type(example_dict['key1']['key2']))# <class '__main__.Hasher'>

请注意,如果缺少密钥,这将返回一个空的哈希器。

因为

Hasher
是的子类,所以
dict
您可以像使用一样使用Hasher
dict
。可以使用所有相同的方法和语法,而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')


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号