Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何简洁地替换json数据中的嵌套值?_Json_Python 3.x_Dictionary - Fatal编程技术网

在Python中,如何简洁地替换json数据中的嵌套值?

在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加载了数据,并尝试使用列表作为输入替换任意嵌套值,其中列表对应于连续子项的名称。我需要一个函数replace\u value(数据,查找,值),它通过将查找中的每个条目视为嵌套子项来替换数据中的值

以下是我要做的工作的结构:

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