更新字典的字典内的值

时间:2018-03-21 11:30:24

标签: python python-3.x dictionary

我有一个字典,其中包含向站点发送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.But获取了新值。我无法将这些值放入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]

但它不起作用。实现这一目标的有效方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一种方法,可以创建一个包含所需更新的新词典。

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