我有一个字典,其中包含向站点发出 POST 请求并获取数据的信息。 下面是我的字典
request_dict = {
"scope_id": "user1",
"tool_id": "appdynamics",
"api_id": "get metrics names",
"input_params": {"user": "abcd", "pwd": "1234", "acc_id": "ab12", "app_id": "TestApp",
"metric-path": "ars",
"time-range-type": "BEFORE_NOW", "duration-in-mins": 10},
"output_filters": null
}
我有另一个字典,其中包含上述字典中提到的一些键的更新值。下面是字典
new_metric_dict = {'tool_id': 'appdynamics', 'pwd': '5678', 'user': 'efgh', 'metric-path': 'ars', 'app_id': 'TestApp', 'acc_id': 'cd34'}
如您所见,我获得了 user、pwd 和 acc_id 的新值。但是我无法将这些值放入 POST 请求字典中,因为它们位于 input_params
内。
我尝试做这样的事情
for i in request_dict:
if type(request_dict[i]) == dict:
for j in request_dict:
if j in new_metric_dict:
request_dict[j] = new_metric_dict[j]
if i in new_metric_dict:
request_dict[i] = new_metric_dict[i]
但这不起作用。实现此目标的有效方法是什么?
最佳答案
这是一种方法,它创建具有所需更新的新字典。
def update_dict(d, new):
out = {}
for m, val in d.items():
if isinstance(d[m], dict):
out[m] = {k: new.get(k, d[m][k]) for k, v in d[m].items()}
else:
out[m] = new.get(m, val)
return out
new = update_dict(request_dict, new_metric_dict)
# {'api_id': 'get metrics names',
# 'input_params': {'acc_id': 'cd34',
# 'app_id': 'TestApp',
# 'duration-in-mins': 10,
# 'metric-path': 'ars',
# 'pwd': '5678',
# 'time-range-type': 'BEFORE_NOW',
# 'user': 'efgh'},
# 'output_filters': 'null',
# 'scope_id': 'user1',
# 'tool_id': 'appdynamics'}
关于python - 更新字典的字典内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49405195/