gpt4 book ai didi

访问子字典键的 Pythonic 方式

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:50 25 4
gpt4 key购买 nike

我经常使用嵌套字典(例如从 json.loads() 创建),有时更深层次的字典会有所不同。 我想找到一种更优雅、Pythonic 的方式来访问子字典,而无需大量嵌套的 if 语句。

data = some_func()
if 'network_data' in data:
print "\n## IP Info"
if 'hostname' in data['network_data']:
print "- Hostname: %s" % data['network_data']['hostname']
if 'org' in data['network_data']:
print "- Org: %s" % data['network_data']['org']
if 'city' in data['network_data'] and 'country' in data['network_data'] and 'region' in data['network_data']:
print "- Location: %s, %s, %s" % (data['network_data']['city'],
data['network_data']['country'],
data['network_data']['region'])

(对其他可能的子字典重复该 if 语句的各种版本,可能会更深入)。

我知道字典的 .get() 函数,但后来遇到了一些中级字典不存在的问题:

ddos = []
for each in vcdb:
variety = each.get('action').get('hacking').get('variety')
if 'DoS' in variety:
ddos.append(each)

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-21-40616b7d85d0> in <module>()
1 ddos = []
2 for each in vcdb:
----> 3 variety = each.get('action').get('hacking').get('variety')
4 if 'DoS' in variety:
5 ddos.append(each)

AttributeError: 'NoneType' object has no attribute 'get'

最佳答案

dict.get接受 default 参数,您可以利用它,如下所示

variety = each.get('action', {}).get('hacking', {}).get('variety', {})

因此,即使在子字典中找不到后续键,它也会返回一个空字典,而不是失败。

关于访问子字典键的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548485/

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