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

如何用更Pythonic的写法实现列表中字典的指定键删除?

问题

现有如下代码可实现预期结果,但想找更Pythonic的实现方式,比如用字典推导式或其他更优写法重构这段代码,求解答。

原代码:

positions_list = [{'symbol': 'ARDX',
  'description': 'ARDELYX INC',
  'quantity': 18.0,
  'cost': 162.18,
  'market_value': 163.08},
 {'symbol': 'GCT',
  'description': 'GIGACLOUD TECHNOLOGY I FCLASS A',
  'quantity': 2.0,
  'cost': 51.4,
  'market_value': 51.24},
 {'symbol': 'IMPP',
  'description': 'IMPERIAL PETROLEUM INC F',
  'quantity': 90.0,
  'cost': 312.3,
  'market_value': 303.3},
 {'symbol': 'MREO',
  'description': 'MEREO BIOPHARMA GROUP FUNSPONSORED ADR 1 ADR REPS 5 ORD SHS',
  'quantity': 21.0,
  'cost': 82.32,
  'market_value': 82.32}]

d, m, c = 'description', 'market_value', 'cost'

for key in positions_list:
    if d in key:
        del key[d]
        del key[m]
        del key[c]

positions_list

预期输出:

[{'symbol': 'ARDX', 'quantity': 18.0},{'symbol': 'GCT', 'quantity': 2.0},{'symbol': 'IMPP', 'quantity': 90.0},{'symbol': 'MREO', 'quantity': 21.0}]
解答

1. 生成新列表(推荐:不修改原数据,更安全)

用列表推导式嵌套字典推导式,直接过滤出需要保留的键,逻辑清晰且符合Pythonic风格:

# 定义要保留的键集合
keep_keys = {'symbol', 'quantity'}
new_positions = [{k: v for k, v in item.items() if k in keep_keys} for item in positions_list]

也可以反过来,通过定义要移除的键集合来过滤:

# 定义要移除的键集合
remove_keys = {'description', 'market_value', 'cost'}
new_positions = [{k: v for k, v in item.items() if k not in remove_keys} for item in positions_list]

2. 原地修改原列表(和原逻辑一致,更简洁)

如果必须修改原列表中的字典,可以简化删除操作,不用逐个del,而是遍历要移除的键集合,用pop方法(带默认值避免键不存在报错):

remove_keys = {'description', 'market_value', 'cost'}
for item in positions_list:
    for k in remove_keys:
        item.pop(k, None)

小提示

相比原地修改,生成新对象的写法通常更安全——尤其是在后续还要用到原数据、或者多线程场景下,能避免意外修改导致的bug。如果没有特殊需求,优先选生成新列表的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:33:15