gpt4 book ai didi

Python 链式 get() 方法与 JSON 中的列表元素

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

[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'

除了捕获数百个潜在的 KeyError 之外,是否有一种首选方法来解决可能丢失的 ['c'](类似于上面的链式 get() 构造)?

最佳答案

我同意@stovfl 的观点,即编写自己的查找函数是可行的方法。虽然,我不认为递归实现是必要的。以下应该工作得很好:

def nested_lookup(obj, keys, default='NA'):
current = obj
for key in keys:
current = current if isinstance(current, list) else [current]
try:
current = next(sub[key] for sub in current if key in sub)
except StopIteration:
return default
return current


d = {'a': {'b': [{'c': 2}, {'d': 3}]}}

print nested_lookup(d, ('a', 'b', 'c')) # 2
print nested_lookup(d, ('a', 'b', 'd')) # 3
print nested_lookup(d, ('a', 'c')) # NA

类方法似乎不太好,因为您将创建很多不必要的对象,如果您试图查找一个不是叶子的节点,那么您将结束使用自定义对象而不是实际的节点对象。

关于Python 链式 get() 方法与 JSON 中的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45077397/

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