0

0

Python中将字典列表按键分组转换为NumPy数组的实用指南

花韻仙語

花韻仙語

发布时间:2025-11-14 13:34:08

|

188人浏览过

|

来源于php中文网

原创

Python中将字典列表按键分组转换为NumPy数组的实用指南

本教程详细介绍了如何将包含单个键值对的字典列表高效转换为一个以原字典键为分组、值为对应numpy数组的字典结构。通过迭代和数据聚合,我们能够将分散的数据按类别归集,并转换为高性能的numpy数组形式,适用于数据分析和科学计算场景。

在数据处理和分析中,我们经常会遇到需要对结构化数据进行转换以适应特定库或算法的场景。其中一个常见需求是将一个包含多个字典的列表,按照字典中的键进行分组,并将每个键对应的所有值集合起来,最终存储为NumPy数组。这对于后续的数值计算、统计分析或机器学习任务至关重要,因为NumPy数组提供了高效的向量化操作能力。

目标与挑战

我们的目标是将以下形式的字典列表:

data = [{'Cool': 128}, {'Cool': 51}, {'Hot': 75}, {'Hot': 62}, {'Archive': 144}, {'Archive': 12}]

转换为一个字典,其键是原始字典的键(例如 "Cool", "Hot", "Archive"),而值是包含所有对应数值的NumPy数组,例如:

{
    "Cool": np.array([128, 51]),
    "Hot": np.array([75, 62]),
    "Archive": np.array([144, 12])
}

主要挑战在于如何高效地遍历原始数据结构,识别并聚合相同键下的所有值,然后将这些聚合后的值转换为NumPy数组。

立即学习Python免费学习笔记(深入)”;

实现步骤

实现这一转换过程可以分为以下三个主要步骤:

1. 初始化分组字典

首先,我们需要创建一个空的字典,用于存储按键分组后的数据。这个字典的键将是原始字典的键,而值最初会是一个列表,用于临时收集所有对应的值。

2. 遍历并聚合数据

接下来,迭代原始的字典列表。对于列表中的每一个字典(每个字典只包含一个键值对),提取其键和值。然后,检查这个键是否已经存在于我们初始化好的分组字典中:

美图AI开放平台
美图AI开放平台

美图推出的AI人脸图像处理平台

下载
  • 如果键已存在,则将当前值追加到该键对应的列表中。
  • 如果键不存在,则以该键为新的键,创建一个新的列表,并将当前值作为第一个元素放入其中。

3. 将列表转换为NumPy数组

完成数据聚合后,分组字典中的每个值都是一个普通的Python列表。为了满足最终需求,我们需要再次遍历这个分组字典,并将每个列表转换为NumPy数组。NumPy数组在处理数值数据时提供了显著的性能优势。

完整示例代码

下面是实现上述转换的完整Python代码:

import numpy as np

# 原始数据:一个包含单个键值对字典的列表
data = [{'Cool': 128}, {'Cool': 51}, {'Hot': 75}, {'Hot': 62}, {'Archive': 144}, {'Archive': 12}]

# 步骤 1: 初始化一个空字典用于存储分组后的数据
grouped_data_lists = {}

# 步骤 2: 遍历原始数据并聚合值
for item_dict in data:
    # 每个item_dict只有一个键值对,因此可以直接获取
    for key, value in item_dict.items():
        if key in grouped_data_lists:
            # 如果键已存在,则追加值
            grouped_data_lists[key].append(value)
        else:
            # 如果键不存在,则创建一个新列表并添加值
            grouped_data_lists[key] = [value]

# 步骤 3: 将每个键对应的列表转换为NumPy数组
grouped_data_arrays = {}
for key, value_list in grouped_data_lists.items():
    grouped_data_arrays[key] = np.array(value_list)

# 打印最终结果以验证
print("转换后的NumPy数组字典:")
for key, array_val in grouped_data_arrays.items():
    print(f'"{key}": {array_val}')

# 也可以直接在原字典上修改,节省内存(如果grouped_data_lists不再需要)
# for key in grouped_data_lists:
#     grouped_data_lists[key] = np.array(grouped_data_lists[key])
# print("\n直接在原字典上修改后的结果:")
# for key, array_val in grouped_data_lists.items():
#     print(f'"{key}": {array_val}')

代码解析

  1. import numpy as np: 导入NumPy库,这是处理数值数组的基础。
  2. grouped_data_lists = {}: 创建一个空字典 grouped_data_lists。在第一阶段,它将存储键到值列表的映射。
  3. 外层 for item_dict in data: 循环: 遍历输入列表 data 中的每一个字典。
  4. 内层 for key, value in item_dict.items(): 循环: 由于每个 item_dict 只有一个键值对,这个循环会立即获取到当前的 key 和 value。
  5. if key in grouped_data_lists:: 检查当前 key 是否已经作为键存在于 grouped_data_lists 中。
    • 如果存在,说明之前已经遇到过这个键,将其 value 追加到 grouped_data_lists[key] 对应的列表中。
    • 如果不存在,说明这是第一次遇到这个键,创建一个新的列表 [value] 并将其赋值给 grouped_data_lists[key]。
  6. grouped_data_arrays = {}: 创建另一个空字典 grouped_data_arrays,用于存储最终的NumPy数组。
  7. for key, value_list in grouped_data_lists.items():: 遍历 grouped_data_lists 中已经聚合好的键值对。
  8. grouped_data_arrays[key] = np.array(value_list): 对于每个键,将其对应的 value_list 转换为 np.array,并存储到 grouped_data_arrays 中。

注意事项与扩展

  1. NumPy的优势: 将数据转换为NumPy数组后,可以利用NumPy提供的各种高效函数进行向量化操作,例如求和、平均值、标准差等,而无需编写显式的循环,这在处理大量数据时能显著提升性能。

  2. 数据类型一致性: 在将列表转换为NumPy数组时,NumPy会尝试推断最佳的数据类型。确保同一键下的所有值具有兼容的数据类型(例如,全部是整数或浮点数),以避免不必要的数据类型转换或错误。

  3. 使用 collections.defaultdict 简化: Python的 collections 模块提供了 defaultdict,可以进一步简化数据聚合的逻辑,避免显式的 if key in ... else ... 判断:

    from collections import defaultdict
    import numpy as np
    
    data = [{'Cool': 128}, {'Cool': 51}, {'Hot': 75}, {'Hot': 62}, {'Archive': 144}, {'Archive': 12}]
    
    # 使用 defaultdict,当访问不存在的键时,会自动创建一个列表
    grouped_data_defaultdict = defaultdict(list)
    
    for item_dict in data:
        for key, value in item_dict.items():
            grouped_data_defaultdict[key].append(value)
    
    # 转换为最终的NumPy数组字典
    final_result = {key: np.array(value_list) for key, value_list in grouped_data_defaultdict.items()}
    
    print("\n使用 defaultdict 的结果:")
    for key, array_val in final_result.items():
        print(f'"{key}": {array_val}')

    defaultdict(list) 在访问一个不存在的键时,会自动为其创建一个空列表,使得 append 操作可以直接进行,代码更加简洁。

总结

本教程展示了如何将一个包含单个键值对字典的列表,高效地转换为一个以键为分组、值为NumPy数组的字典。通过清晰的迭代和聚合逻辑,结合NumPy的强大功能,我们能够将原始数据转换为更适合数值计算和数据分析的结构。无论是手动实现还是利用 collections.defaultdict 简化,理解其背后的数据流和转换原理,对于日常的数据处理工作都非常有益。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

769

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

659

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1325

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

710

2023.08.11

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 11.2万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号