字典去重复的几种方法

技能实验室 发表于 2022/11/18 22:14:56 2022/11/18
【摘要】 先说一下什么是数组:数组的定义:数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.数组中的元素是可以重复的,所以就出现了去重的需求;在python中,字典去重的方法有很多;1、使用set;arr = ['a','b','a','c','b']def quchong01(ar...

先说一下什么是数组:
数组的定义:

数组是相同类型数据的有序集合.
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

数组中的元素是可以重复的,所以就出现了去重的需求;

在python中,字典去重的方法有很多;

  • 1、使用set;
arr = ['a','b','a','c','b']
def quchong01(arr):
    return list(set(arr))
print(quchong01(arr))

多次执行以上代码,会发现输出顺序可能会不一样;
在这里插入图片描述

  • 2、使用字典的key
def quchong02(arr):
    a={}    
    a = a.fromkeys(arr)
    return list(a)

print(quchong02(arr))

多次执行以上代码,输出是一致的

  • 3、循环比较去重
def quchong03(data):
    new_data = []
    for i in range(len(data)):
        if data[i] not in new_data:
            new_data.append(data[i])
    return new_data
print(quchong03(arr))
  • 4、使用pandas
def quchong04(data):
    import pandas as pd
    return pd.unique(data).tolist()

特殊情况:

如果数组是字典组成的,是无法直接对数组内的字典采用set的方式进行去重的;
因为使用 set 去重的前提是该对象为不可变对象,而字典是可变对象,因此无法直接使用该方法去重。

字典数组去除重复的方法:

  • 字典之所以不能用set去重,是因为它是可变对象。可以把它变成不可变对象
data = [{"a": 1}, {"a": 1}, {"a": 3}, {"b": 4}]
def quchong05(data):
    immutable_dict = set([str(item) for item in data])
    data = [eval(i) for i in immutable_dict]
    return data
print(quchong05(data))

遍历字典,将每个子项变成字符串存放到数组中,再通过set函数去重。
通过eval函数,将去重后的数组里的每个子项重新转化回字典。

  • 或者将数组内的每个字典转成元组,也就是不可变对象,再使用set进行去重。去重完毕后再使用dict函数将元组重新组成字典对。
def quchong06(data):
    data = [dict(t) for t in set([tuple(d.items()) for d in data])]
    return data

print(quchong06(data))
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。