Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 如何更改嵌套字典中的值_Python - Fatal编程技术网

Python 如何更改嵌套字典中的值

Python 如何更改嵌套字典中的值,python,Python,我需要更改嵌套字典中的值。考虑一下这本字典: stocks = { 'name': 'stocks', 'IBM': 146.48, 'MSFT': 44.11, 'CSCO': 25.54, 'micro': {'name': 'micro', 'age': 1} } 我需要遍历所有键并更改所有name键的值 stocks.name stocks.micro.name 这些钥匙需要更换。但是,我在手之前

我需要更改嵌套字典中的值。考虑一下这本字典:

stocks = {
        'name': 'stocks',
        'IBM': 146.48,
        'MSFT': 44.11,
        'CSCO': 25.54,
        'micro': {'name': 'micro', 'age': 1}
    }
我需要遍历所有键并更改所有
name
键的值

stocks.name
stocks.micro.name

这些钥匙需要更换。但是,我在手之前不知道该换哪把钥匙。所以,我需要循环键并更改值

示例

change_keys("name", "test")
输出

{
     'name': 'test',
     'IBM': 146.48,
     'MSFT': 44.11,
     'CSCO': 25.54,
     'micro': {'name': 'test', 'age': 1}
}

支持未知嵌套级别数的递归解决方案:

def change_key(d, required_key, new_value):
    for k, v in d.items():
        if isinstance(v, dict):
            change_key(v, required_key, new_value)
        if k == required_key:
            d[k] = new_value

stocks = {
    'name': 'stocks',
    'IBM': 146.48,
    'MSFT': 44.11,
    'CSCO': 25.54,
    'micro': {'name': 'micro', 'age': 1}
}


change_key(stocks, 'name', 'new_value')
print(stocks)
#  {'name': 'new_value', 
#  'MSFT': 44.11, 
#  'CSCO': 25.54,
#  'IBM': 146.48,
#  'micro': {'name': 'new_value', 
#            'age': 1}
#  }

“但是,我在手之前不知道要换哪把钥匙”你不是说你需要换所有的“名字”钥匙吗?@DeepSpace是的,没错。这只是一个示例,因为有多个名为“name”的键。如何确保更改正确的值?能否添加一个示例,说明您期望的输入/输出?不清楚您希望这个dict如何变异。我给出了一个示例输出
zip(d.keys(),d.values())
?WTF<代码>d.项()!我把键“name”的位置改成了他想要的值,对吗?@Attersson不是真的
v=repl
应该是
d[k]=repl
,否则你只是在改变
v
的值,而不是dict中存储的值(当项目是不可变的,像字符串一样)不要改变键。我只想更改值。如问题中的示例输出所示。
def changeKeys(d, repl):
    for k,v in zip(d.keys(),d.values()):
        if isinstance(v, dict):
            changeKeys(v,repl)
        elif k == "name":
            d[k]= repl