如何更改嵌套字典中的值

时间:2018-05-14 18:59:41

标签: python

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

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}
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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}
#  }