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