假设我们有这个dict
:
{
"app_url": "",
"models": [
{
"perms": {
"add": true,
"change": true,
"delete": true
},
"add_url": "/admin/cms/news/add/",
"admin_url": "/admin/cms/news/",
"name1": ""
}
],
"has_module_perms": true,
"name2": "u\u0027CMS\u0027"
}
如果要求仅提供密钥和值,如何为密钥add_url
设置新值?
因此,我不想做类似data["models"]["add_url"] = value
的事情,而是只想将"add_url"
和新值传递给函数。
在我的情况下,dict
中的每个键都是唯一的str
,因此不会出现键重复出现一次的情况。
答案 0 :(得分:2)
您可以使用递归函数来查找字段并更新值。
your_dict = {
"app_url": "",
"models": [
{
"perms": {
"add": True,
"change": True,
"delete": True
},
"add_url": "/admin/cms/news/add/",
"admin_url": "/admin/cms/news/",
"name1": ""
}
],
"has_module_perms": True,
"name2": "u\u0027CMS\u0027"
}
def recursive_update(haystack, needle, value):
if isinstance(haystack, dict):
for key, value_dict in haystack.items():
if needle == key:
haystack[key] = value
elif isinstance(value_dict, list) or isinstance(value_dict, dict):
recursive_update(value_dict, needle, value)
elif isinstance(haystack, list):
for value_list in haystack:
if isinstance(value_list, dict):
recursive_update(value_list, needle, value)
return haystack
用法:
recursive_update(your_dict, 'add_url', 'http://www.google.com')
注意:我不建议您使用隐式编程方法。
以上内容尚未经过全面测试,因此请务必进行测试;它更多地是递归如何实现目标的示例。