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. 遍历并聚合数据

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

Tome
Tome

先进的AI智能PPT制作工具

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

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 简化,理解其背后的数据流和转换原理,对于日常的数据处理工作都非常有益。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

549

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

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

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

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

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