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

如何快速移除Python字典列表中的指定公共键?

问题

我有一个字典列表:

res = [
    {'termA':'A1', 'termB':'B1', 'termC':'C1'},
    {'termA':'A2', 'termB':'B2', 'termC':'C2'},
    {'termA':'A3', 'termB':'B3', 'termC':'C3'}
] 

每个字典的键都相同,对应值不同(类似矩阵结构)。我想找到最快的方法,从所有字典中移除/提取特定键(比如移除termA和termB,只保留termC)。

我最初用for循环实现:

new = [] 
for i in res: 
    new.append({'termC':i['termC']})

能得到预期结果:

new = [{'termC':'C1'},{'termC':'C2'},{'termC':'C3'}]

但数据量一大速度就很慢,列表推导式的表现也不理想。试过转成DataFrame,耗时同样很长。有没有更优的解决方案?

解决方案

对于大规模数据,避免Python层面的逐元素循环是提速关键,优先用底层C实现的工具:

1. 用operator.itemgetter批量提取(效率远超纯Python循环)

operator.itemgetter是C实现的,比普通循环/推导式快很多。

  • 只保留单个键的情况:
from operator import itemgetter

keep_key = 'termC'
getter = itemgetter(keep_key)
new = [{keep_key: getter(d)} for d in res]
  • 保留多个键的情况(比如同时留termB和termC):
keep_keys = ('termB', 'termC')
getter = itemgetter(*keep_keys)
new = [dict(zip(keep_keys, getter(d))) for d in res]

2. 直接生成值列表(最快方案,若不需要字典结构)

如果最终不需要字典格式,只是要termC的值列表,这是最快的方式——完全省去了构建新字典的开销:

# 列表推导式版本
new = [d['termC'] for d in res]

# 更高效的itemgetter+map版本
new = list(map(itemgetter('termC'), res))

3. 优化版列表推导式(无额外依赖)

如果不想引入库,优化后的列表推导式比原始for循环快(减少了append的调用开销):

new = [{'termC': d['termC']} for d in res]

为什么DataFrame不适合?

把字典列表转成DataFrame本身就有不小的开销,包括类型推断、数据结构转换等,对于大规模数据来说,这个转换成本远高于直接处理字典列表,所以不建议用这种方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:05:56