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

如何用单行代码从字典列表提取值到多变量(避免重复遍历)

提取字典列表中多键对应值的高效单行实现

给定结构一致的字典列表lst_of_dcts,示例如下:

lst_of_dcts = [
    {
        'a': 1,
        'b': 2,
        'c': 3,
        'd': 4,
    },
    # 省略更多字典
    {
        'a': 10,
        'b': 11,
        'c': 12,
        'd': 13,
    },
    {
        'a': 14,
        'b': 15,
        'c': 16,
        'd': 17,
    }
]

当前通过多次列表推导式提取各键对应的数值列表:

as_list = [d['a'] for d in lst_of_dcts]
bs_list = [d['b'] for d in lst_of_dcts]
cs_list = [d['c'] for d in lst_of_dcts]

这种方式需要多次遍历字典列表,是否有更简洁的单行实现可以避免重复遍历?


方法1:单行实现,仅遍历一次

用zip()配合生成器表达式,一次性取出所有目标键的值并打包,仅遍历原列表一次:

as_list, bs_list, cs_list = zip(*((d['a'], d['b'], d['c']) for d in lst_of_dcts))

如果需要列表而非元组,可通过map(list, ...)转换:

as_list, bs_list, cs_list = map(list, zip(*((d['a'], d['b'], d['c']) for d in lst_of_dcts)))

方法2:用字典统一收集结果

如果需要保留键与列表的映射关系,用字典推导式也能一次遍历完成:

key_lists = {key: [d[key] for d in lst_of_dcts] for key in ['a', 'b', 'c']}

之后直接通过key_lists['a']、key_lists['b']即可获取对应列表。

方法3:大规模数据用pandas

处理大规模数据时,pandas的DataFrame转换更高效,且仅遍历一次原列表:

import pandas as pd
df = pd.DataFrame(lst_of_dcts)
as_list, bs_list, cs_list = df['a'].tolist(), df['b'].tolist(), df['c'].tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:45:19