python - 更新字典的字典内的值

标签 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 的新值。但是我无法将这些值放入 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/

相关文章:

Python:翻译/替换不是你想要的字符串单词

python - 由于 unicode 解码错误,无法在 pandas 中打开 csv 文件

python-3.x - 如何只获得正分?

python - 检查 python 字典中的键模式

ios - 按键名在字典数组中搜索

python - 如何使用另一个列表作为键的引用来更改 Python 3.5 字典中键的顺序?

python - 如何解释这两个 "="以及整个表达式?

python - Cumsum 作为现有 Pandas 数据中的新列

python - 如何为视频播放器选择文件

python - Sprite 不会出现