在Python中,如何简洁地替换json数据中的嵌套值?
这是对 我从JSON加载了数据,并尝试使用列表作为输入替换任意嵌套值,其中列表对应于连续子项的名称。我需要一个函数replace\u value(数据,查找,值),它通过将查找中的每个条目视为嵌套子项来替换数据中的值 以下是我要做的工作的结构:在Python中,如何简洁地替换json数据中的嵌套值?,json,python-3.x,dictionary,Json,Python 3.x,Dictionary,这是对 我从JSON加载了数据,并尝试使用列表作为输入替换任意嵌套值,其中列表对应于连续子项的名称。我需要一个函数replace\u value(数据,查找,值),它通过将查找中的每个条目视为嵌套子项来替换数据中的值 以下是我要做的工作的结构: json_data = {'alldata':{'name':'CAD/USD','TimeSeries':{'dates':['2018-01-01','2018-01-02'],'rates':[1.3241,1.3233]}}} def repl
json_data = {'alldata':{'name':'CAD/USD','TimeSeries':{'dates':['2018-01-01','2018-01-02'],'rates':[1.3241,1.3233]}}}
def replace_value(data,lookup,value):
DEFINITION
lookup = ['alldata','TimeSeries','rates']
replace_value(json_data,lookup,[2,3])
# The following should return [2,3]
print(json_data['alldata']['TimeSeries']['rates'])
我可以从get_value()开始,但我对如何进行替换感到困惑。我不习惯这种代码结构,但希望能够通过编程替换数据中的一个值,给出连续子项列表和要替换的值
注意:查找长度可能为1跟随查找,直到距离结束第二秒,然后将值指定给当前对象中的最后一次查找
def get_value(data,lookup): # Or whatever definition you like
res = data
for item in lookup:
res = res[item]
return res
def replace_value(data, lookup, value):
obj = get_value(data, lookup[:-1])
obj[lookup[-1]] = value
json_data = {'alldata':{'name':'CAD/USD','TimeSeries':{'dates':['2018-01-01','2018-01-02'],'rates':[1.3241,1.3233]}}}
lookup = ['alldata','TimeSeries','rates']
replace_value(json_data,lookup,[2,3])
print(json_data['alldata']['TimeSeries']['rates']) # [2, 3]
如果您担心列表副本查找[:-1]
,可以将其替换为:
您可以首先获取最终子目录的父目录,以便引用它来更改最终键下该子目录的值:
def replace_value(data, lookup, replacement):
*parents, key = lookup
for parent in parents:
data = data[parent]
data[key] = replacement
以便:
json_data = {'alldata':{'name':'CAD/USD','TimeSeries':{'dates':['2018-01-01','2018-01-02'],'rates':[1.3241,1.3233]}}}
lookup = ['alldata','TimeSeries','rates']
replace_value(json_data,lookup,[2,3])
print(json_data['alldata']['TimeSeries']['rates'])
产出:
[2, 3]
一旦你有了
get\u值
get_value(json_data, lookup[:-1])[lookup[-1]] = value
get_value(json_data, lookup[:-1])[lookup[-1]] = value