【发布时间】:2020-04-22 07:25:50
【问题描述】:
我从 JSON 加载数据并尝试提取任意嵌套值使用列表作为输入,其中列表对应于 连续子项的名称。我想要一个函数 get_value(data,lookup),它通过将 lookup 中的每个条目视为嵌套子项来从数据中返回值。
在下面的例子中,当lookup=['alldata','TimeSeries','rates']时,返回值应该是[1.3241,1.3233]。
json_data = {'alldata':{'name':'CAD/USD','TimeSeries':{'dates':['2018-01-01','2018-01-02'],'rates':[1.3241,1.3233]}}}
def get_value(data,lookup):
res = data
for item in lookup:
res = res[item]
return res
lookup = ['alldata','TimeSeries','rates']
get_value(json_data,lookup)
我的例子有效,但有两个问题:
-
效率低下 - 在我的 for 循环 中,我将整个 TimeSeries 对象复制到 res,然后将其替换为费率列表.正如@Andrej Kesely 解释的那样,res 是每次迭代的引用,因此不会复制数据。 - 它不简洁 - 我希望能够找到一种简洁的(例如一两行)使用列表理解语法之类的方法来提取数据
【问题讨论】:
-
我觉得不错,为什么觉得效率低?您没有在循环中复制任何内容,
res变量仅包含对对象的引用。 -
@AndrejKesely - 谢谢,我没有意识到 res 是一个参考,只是用
res = json_data; res = res['alldata']; print(json_data['alldata'] is res)确认了它。这意味着效率低下不是问题,只是简洁
标签: json python-3.x dictionary