gpt4 book ai didi

Python 3.5 if 语句嵌套字典数据 : TypeError

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:15 26 4
gpt4 key购买 nike

if story['epic']['id'] == epic['id']:

TypeError: 'NoneType' object is not subscriptable

代码:

for epic in epics:
if epic['archived'] is False:
print(epic['short_name'], epic['summary'], epic['story_count'])
for story in stories:
if story['epic']['id'] == epic['id']:
print(story['summary'], story['cell']['label'])

我可能完全错了,但仍在尝试学习 json/dict 迭代以及如何在多个迭代之间进行比较。

我正在尝试从 ID 与同一史诗 ID 相匹配的故事中检索数据。我知道 story['epic'] 包含 ['id']['local_id'] 但显然我是无法将其与非故事字典数据进行比较?

注意:story['epic']['id'] 的值可能为零。

最佳答案

大多数 JSON 库将其输入转换为嵌套的 dict。但是,除非来源非常友善,否则在处理 JSON 输入时,您几乎总是必须处理对象可能被省略的事实。

处理此问题的最佳方法是使用 dict.get() 而不是直接对生成的 dict 下标,因为它允许您在键是时提供默认值失踪了。

因此,您可以代替 story['epic']['id']

story_id = story.get('epic', {}).get('id', "")

这将返回故事的 id 值(如果存在)或空字符串。无论哪种方式,您都可以安全地将其与 epic['id']

请注意,所有中间步骤都应返回一个空的 dict 作为默认值 - 允许调用链继续而不引发异常。

mydict.get('k1',{}).get('k1.1',{}).get('k1.1.1`,{}).get('lastkey','default')

如果您发现自己在足够多的地方这样做看起来很重复(并且您会:),您总是可以将其抽象为实用函数

def getnested(thedict,intermediate_keys,final_key,dflt):
dd = thedict
for key in intermediate_keys:
dd = dd.get(key,{})
return dd.get(final_key,dflt)

并这样调用它

getnested(story,['epic'], 'id', 'missing')
getnested(mydict,['k1','k1.1','k1.1.1'],'lastkey','default')

关于Python 3.5 if 语句嵌套字典数据 : TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35324114/

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