猿问

Python:替换嵌套字典中的值

只要键是' current_values ' ,我想用与integers相同的值替换值(格式化为字符串)。

d = {'id': '10', 'datastreams': [{'current_value': '5'}, {'current_value': '4'}]}

期望的输出:

d = {'id': '10', 'datastreams': [{'current_value': 5}, {'current_value': 4}]}


慕田峪4524236
浏览 141回答 3
3回答

函数式编程

以下代码替换字典中的值(的子字符串)。它适用于嵌套的 json 结构并处理 json、列表和字符串类型。如果需要,您可以添加其他类型。def dict_replace_value(d, old, new):    x = {}    for k, v in d.items():        if isinstance(v, dict):            v = dict_replace_value(v, old, new)        elif isinstance(v, list):            v = list_replace_value(v, old, new)        elif isinstance(v, str):            v = v.replace(old, new)        x[k] = v    return xdef list_replace_value(l, old, new):    x = []    for e in l:        if isinstance(e, list):            e = list_replace_value(e, old, new)        elif isinstance(e, dict):            e = dict_replace_value(e, old, new)        elif isinstance(e, str):            e = e.replace(old, new)        x.append(e)    return x# See input and output belowb = dict_replace_value(a, 'string', 'something')输入:a = {    'key1': 'a string',    'key2': 'another string',    'key3': [        'a string',        'another string',        [1, 2, 3],        {            'key1': 'a string',            'key2': 'another string'        }    ],    'key4': {        'key1': 'a string',        'key2': 'another string',        'key3': [            'a string',            'another string',            500,            1000        ]    },    'key5': {        'key1': [            {                'key1': 'a string'            }        ]    }}输出:{   "key1":"a something",   "key2":"another something",   "key3":[      "a something",      "another something",      [         1,         2,         3      ],      {         "key1":"a something",         "key2":"another something"      }   ],   "key4":{      "key1":"a something",      "key2":"another something",      "key3":[         "a something",         "another something",         500,         1000      ]   },   "key5":{      "key1":[         {            "key1":"a something"         }      ]   }}

噜噜哒

d = {'id': '10', 'datastreams': [{'current_value': '5'}, {'current_value': '4'}]}for elem in d['datastreams']:      # for each elem in the list datastreams    for k,v in elem.items():       # for key,val in the elem of the list         if 'current_value' in k:   # if current_value is in the key            elem[k] = int(v)       # Cast it to intprint(d)输出:{'id': '10', 'datastreams': [{'current_value': 5}, {'current_value': 4}]}

江户川乱折腾

一种通用方法(假设您事先不知道 dict 的哪个键指向列表)将遍历 dict 并检查其值的类型,然后在需要时再次迭代到每个值。在您的情况下,您的字典可能包含一个字典列表作为值,因此检查一个值是否为列表类型就足够了,如果是,则遍历列表并更改您需要的字典。可以使用如下函数递归完成:def f(d):    for k,v in d.items():        if k == 'current_value':            d[k] = int(v)        elif type(v) is list:            for item in v:                if type(item) is dict:                    f(item)>>> d = {'id': '10', 'datastreams': [{'current_value': '5'}, {'current_value': '4'}]}>>> f(d)>>> d{'id': '10', 'datastreams': [{'current_value': 5}, {'current_value': 4}]}  
随时随地看视频慕课网APP

相关分类

Python
我要回答