【发布时间】:2017-12-18 01:05:33
【问题描述】:
[Python 2.7]
我有一个 JSON 源,它并不总是返回预期键的完整列表。我正在使用链式gets() 来解决这个问题。
d = {'a': {'b': 1}}
print(d.get('a', {}).get('b', 'NA'))
print(d.get('a', {}).get('c', 'NA'))
>>> 1
>>> NA
但是,有些字典在列表中:
d = {'a': {'b': [{'c': 2}]}}
print(d['a']['b'][0]['c'])
>>> 2
我不能使用 get() 方法来解决这个问题,因为列表不支持 get() 属性:
d.get('a', {}).get('b', []).get('c', 'NA')
>>> AttributeError: 'list' object has no attribute 'get'
除了捕获数百个潜在的 KeyErrors 之外,是否有更好的方法来解释潜在的缺失 ['c'](与上面的链式 get() 构造类似)?
【问题讨论】:
-
.get('b', [{}])[0],也许吧? -
“除了捕获数百个潜在的 KeyErrors,[...]”
try: ... except:有什么问题? -
@jonrsharpe:谢谢。这就是我一直在寻找的。请考虑将其添加为问题的答案。
-
@Rawing:在 OP 中回答。我想避免使用数百个 try 块。我尝试了一次递归,但考虑到源代码的复杂性,它变得太笨拙了。
-
我不明白您为什么需要多个
try块。编写一个函数来检索您想要的 dict/list 项,如果抛出异常,则返回一个默认值。
标签: python json python-2.7 list dictionary