首页 > 编程语言 >python列表套字典去重

python列表套字典去重

时间:2022-10-28 22:22:17浏览次数:50  
标签:set name python list 列表 data id user01 字典

最近在写工具,拿到数据,发现有重复的,想到用set去重,结果报错了,哈哈,重新学习下

# 例子:
data_list = [{'id':1,'name':'user01'},{'id':2,'name':'user02'},{'id':1,'name':'user01'}]
data = set(data_list)

# 报错:
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    data = set(data_dict)
TypeError: unhashable type: 'dict'

"""错误提示说 不可哈希类型。
可哈希:int \ float \ str \ tuple
不可哈希: list \ set \ dict
"""

解决方法:

# 源数据
data_list = [{'id':1,'name':'user01'},{'id':2,'name':'user02'},{'id':1,'name':'user01'}]

# 第一种方法

def get_data(data_list):
    """
    列表套字典去重
    :return:
    """
    seen = set()
    new_l = []

    for i in data_list:
        # 把字典数据转为元组,元组是可哈希类型
        t = tuple(i.items())

        if t not in seen:
            seen.add(t)
            new_l.append(i)

    print(new_l)

get_data(data_list)

# 结果如下:
[{'id': 1, 'name': 'user01'}, {'id': 2, 'name': 'user02'}]


# 第二种方法:
new_data_list = [dict(d) for d in (set(tuple(i.items()) for i in data_list))]
print(new_data_list)

# 第一个先循环data_list数据,把i.items()转为元组,set是把数据去重。
# 第二个循环是把数据转成字典

# 结果如下:
[{'id': 1, 'name': 'user01'}, {'id': 2, 'name': 'user02'}]

  

  

标签:set,name,python,list,列表,data,id,user01,字典
From: https://www.cnblogs.com/lucktomato/p/16837701.html

相关文章

  • Python 基础语法
    一、字面量字面量:在代码中,被写下来的固定的值,称之为字面量数字(Number)字符串(String)列表(List):有序的可变序列元祖(Tuple):有序的不可变序列集合(Set):无序不重复集合字典(Dic......
  • 【基础知识】为python部署第三方库(设备可联网版)
    “大家好哇!继上次我们说完怎么安装python之后,这一次给大家分享一下怎么根据自己的需求来部署所需要的库,如numpy库等。”01安装第三方库众所周知,在python下面有很多库,可......
  • 【python】装饰器参数
    装饰器是AOP编程思想,给主体函数增加功能,又不让代码入侵到主体函数中,实现高内聚,低耦合。参数有两种,一种是功能函数带参数、另外一种是装饰器函数带参数,如果装饰功能部分代......
  • 【基础知识】为python部署第三方库(设备不可联网版)
    “大家好哇!继上次我们说完怎么安装python之后,这一次给大家分享一下怎么根据自己的需求来部署所需要的库,如numpy库等。”01安装第三方库我们在前面已经说过了当设备可以......
  • Python time.strptime()方法
    time.strptime()函数根据指定的格式把一个时间字符串解析为时间元组。importtimefromdatetimeimportdatetimeresult=time.strptime("1.2022-12-1010:45:00","......
  • 10道Python面试题
    1、Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。浅拷贝:创建一个新的对象,但它包......
  • python时间戳转换
    importtime,datetime#当前时间转时间戳maintenance_time=(datetime.datetime.now()+datetime.timedelta()).strftime("%Y-%m-%d%H:%M:%S")struct_time=time.......
  • python 爬虫 ----- xpath
    xpath是在XML文档中搜索内容的一门语言html是xml的一个子集 xml代码示例"""<book><id>1</id><name>野花遍地香</name><price>1.23</price><......
  • Python-一个傻瓜可视化的神库Streamlit
    1.如何安装?和安装其他包一样,安装streamlit非常简单,一条命令即可➜pipinstallstreamlit考虑到streamlit会附带安装比较多的工具依赖包,为了不污染当前的主要环境,......
  • Python RabbitMQ pika的安装及direct路由模式的使用
    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有......