当前位置: 首页 > news >正文

python dict list 去重

在Python中,对字典列表(list of dictionaries)进行去重操作可以通过多种方式实现。这里我将介绍几种常见的方法来完成这一任务。

方法1:使用列表推导式和set
如果你关心的是字典中的某个特定键的值是唯一的,你可以使用列表推导式结合set来去重。例如,如果每个字典都有一个"id"键,你可以这样操作:

dict_list = [
{“id”: 1, “name”: “Alice”},
{“id”: 2, “name”: “Bob”},
{“id”: 1, “name”: “Charlie”} # 重复的id
]

使用一个set来跟踪已经添加的id

seen = set()
unique_dict_list = [
x for x in dict_list if not (x[‘id’] in seen or seen.add(x[‘id’]))
]

print(unique_dict_list)
方法2:使用字典推导式和set
如果你想要基于多个字段去重,可以先创建一个由这些字段组成的元组(或任何可哈希的组合),然后使用这个元组作为去重的依据:

dict_list = [
{“id”: 1, “name”: “Alice”},
{“id”: 2, “name”: “Bob”},
{“id”: 1, “name”: “Charlie”} # 重复的id,但这里我们基于id和name去重
]

使用一个set来跟踪已经添加的元组(基于id和name)

seen = set()
unique_dict_list = [
x for x in dict_list if not ((x[‘id’], x[‘name’]) in seen or seen.add((x[‘id’], x[‘name’])))
]

print(unique_dict_list)
方法3:使用pandas库(对于更复杂的数据处理)
如果你在处理较大的数据集或者需要更高级的数据处理功能,可以使用pandas库。pandas提供了非常方便的数据去重方法:

import pandas as pd

dict_list = [
{“id”: 1, “name”: “Alice”},
{“id”: 2, “name”: “Bob”},
{“id”: 1, “name”: “Charlie”} # 重复的id
]

df = pd.DataFrame(dict_list)
unique_df = df.drop_duplicates(subset=‘id’) # 基于’id’去重
unique_dict_list = unique_df.to_dict(‘records’)

print(unique_dict_list)
方法4:自定义函数去重(基于任意键)
如果你需要根据多个键或者复杂的条件去重,可以自定义一个函数:

def is_unique(item, seen):
key = (item[‘id’], item[‘name’]) # 可以根据需要修改这里的键组合
if key not in seen:
seen.add(key)
return True
return False

dict_list = [
{“id”: 1, “name”: “Alice”},
{“id”: 2, “name”: “Bob”},
{“id”: 1, “name”: “Charlie”} # 重复的id和name组合,但这里我们基于id和name去重
]
seen = set()
unique_dict_list = [x for x in dict_list if is_unique(x, seen)]

print(unique_dict_list)
选择哪种方法取决于你的具体需求,比如数据的大小、是否需要基于多个字段去重等因素。对于大多数简单场景,方法1和方法2应该足够使用。如果需要更强大的数据处理能力,可以考虑使用pandas。

http://www.dtcms.com/a/269104.html

相关文章:

  • 【数据驱动视角下的流体模拟:CFD 与深度学习(GANs/PINN)在圆柱绕流及机翼分析中的应用】
  • Video Background Remover V3版 - AI视频一键抠像/视频换背景 支持50系显卡 一键整合包下载
  • 动手学深度学习13.7. 单发多框检测(SSD)-笔记练习(PyTorch)
  • Pycharm恢复默认设置,配置导致复制粘贴等不能使用
  • 气候大模型的演化路径与产业落地展望:AI重构全球气候科学的新范式
  • 在bash shell 函数传递数组的问题
  • CSS知识复习4
  • 卷积神经网络:卷积层的核心原理与机制
  • MATLAB | 绘图复刻(二十一)| 扇形热图+小提琴图
  • C++11中的std::ratio:编译时有理数运算的艺术
  • 暑假算法日记第三天
  • WebRTC与RTMP
  • iOS App抓包工具排查后台唤醒引发请求异常
  • Python编译器(Pycharm Jupyter)
  • MySql:多表查询——子查询
  • 【应急响应】Linux 自用应急响应工具(LinuxCheckShoot)
  • 腾讯地图 vue3 使用 封装 地图组件
  • 赛事开启|第三届视觉语音识别挑战赛 CNVSRC 2025 启动
  • 自动驾驶ROS2应用技术详解
  • 鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
  • Python 异步编程从基础到高级全面指南
  • 模拟数字电路基础-2
  • 初识Neo4j之Cypher(三)
  • leetcode1089.复写零
  • 代码审计-SQL注入
  • 简单的安卓ANR与卡顿分析
  • 要将本地分支强制更新为与远程分支完全一致(以远程为主
  • c++文字游戏_闯关打怪2.0(开源)
  • paimon.disk包:磁盘处理
  • 关于Novatek B/G-R/G白平衡色温坐标系再探究