You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单行操作给字典列表添加基于指定字段值的新字段?

问题描述

我有如下形式的字典列表:

[{'a': '2.1', 'z': 'apple', 'aa': 'banana'}, {'a': '4.7', 'z': 'apple', 'aa': 'banana'}, {'a': '1.6', 'z': 'apple', 'aa': 'orange'}]

希望为每个字典添加一个新字段m,其值为键aa对应值去掉首字母后的结果,最终列表如下:

[{'a': '2.1', 'z': 'apple', 'aa': 'banana', 'm':'anana'}, {'a': '4.7', 'z': 'apple', 'aa': 'banana', 'm':'anana'}, {'a': '1.6', 'z': 'apple', 'aa': 'orange', 'm':'range'}]

我已经用下面的代码实现了需求:

for x in val:
    x['m'] = x['aa'][1:]

请问能否通过单行操作完成此需求?

解决方案

当然可以,有几种单行实现的方式:

  • 生成新字典列表(推荐,可读性高)

    val = [dict(x, m=x['aa'][1:]) for x in val]
    

    用列表推导式遍历原列表,每个循环里用dict()把原字典的键值对和新增的m字段合并成新字典,最后赋值回val就能得到目标结果。

  • 原地修改原字典
    如果不想生成新列表,只想直接修改原字典,可以用:

    [x.update({'m': x['aa'][1:]}) for x in val]
    

    这里update()方法会直接修改原字典,列表推导式只是用来循环执行操作,最后会生成一个全是None的临时列表,忽略它就行,原字典列表已经完成更新。

  • 用map函数实现
    也可以结合map和匿名函数:

    val = list(map(lambda x: x.update({'m': x['aa'][1:]}) or x, val))
    

    因为update()返回None,所以用or返回修改后的字典,最后转成列表得到更新后的结果。

内容的提问来源于stack exchange,提问作者imhans4305

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:30:52