Python:不可哈希数据结构的去重实践

本文介绍了一种针对不可哈希数据结构(如字典和列表)进行去重的方法,并通过具体实例展示了如何去除列表中嵌套字典及列表的重复项。

主要实践一个函数对’列表嵌套字典’、’列表嵌套列表’的去重


# -*- coding:utf-8 -*-

## 只针对不可哈希的数据结构(字典/列表/对象集合)去重

# 1 - 简要的通用方法(为了更好的操作 可以扩展的更加丰富)
def dedupe(items,key=None):
    seen = set()
    for item in items:
        # - 不可哈希值转可哈希值部分(核心)
        val = item if key is None else key(item)
        if val not in seen:
            yield item# 生成器 更省心
            seen.add(val)

# 2 - 去除列表对象中 字典 的重复项
lst = [{'x':1,'y':2},{'x':1,'y':3},{'x':1,'y':2,'z':3},{'x':2,'y':2},{'x':3,'y':4}]

#【字典】不可哈希 故而转义成可哈希的对象tuple
result1 = list(dedupe(lst,key=lambda x:(x['x'],x['y'],x['z'] if 'z' in x else 0))) # 根据对象的属性 来 去除重复项
print(result1)

# 3 - 去除列表对象中 列表 的重复项
lst = [[1],[2],[3],[1],[3],[4]]

#【列表】不可哈希 故而转义成可哈希的对象tuple
result2 = list(dedupe(lst,key=lambda x:tuple(x)))
print(result2)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AITyson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值