美文网首页
不可哈希的数据结构的重复元素去除方法

不可哈希的数据结构的重复元素去除方法

作者: Closears | 来源:发表于2015-06-12 23:51 被阅读445次

先上一下可哈希数据结构重复元素去除方法:

def dedupe(items):
    seen = set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)

不可哈希数据结构的方法类似:

def dedupe(items, key=None):
    seen = set()  #这里利用了set的特点,即无重复元素
    for item in items:
        val = item if key is None else key(item)  #处理数据,使之变成可以比较的格式,即把数据解构,其中key为解构函数,val为解构后的数据
        if val not in seen:
            yield item  #这里要塞入generator的是item,因为val只是为了方便处理生成的“中间数据”,并没有什么卵用
            seen.add(val)

下面说一下使用这个函数的方法:
测试数据:

items = [{'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]

函数调用的两个示例:

1.本例中的匿名函数(即“解构函数”)表示的含义是以(x,y)这个整体为主键,去除items中与之重复的元素

print(list(dedupe(items, key=lambda d: (d['x'], d['y']))))

控制台输出结果如下:

[{'y': 2, 'x': 1}, {'y': 3, 'x': 1}, {'y': 4, 'x': 2}]

2.本例中的匿名函数(即“解构函数”)以x为主键

print(list(dedupe(items, key=lambda d: d['x'])))

控制台输出结果如下:

[{'y': 2, 'x': 1}, {'y': 4, 'x': 2}]

这里用lambda写解构函数很方便,值得学习。
另外注意一下此处的
list (代码中dedupe外面的那一个),可以直接把generator转换为list,使用起来很方便。

相关文章

  • 不可哈希的数据结构的重复元素去除方法

    先上一下可哈希数据结构重复元素去除方法: 不可哈希数据结构的方法类似: 下面说一下使用这个函数的方法:测试数据: ...

  • Day15--集合框架

    TreeSet Set:无序,不可以重复元素。 | --HashSet:数据结构是哈希表。线程是非同步的。保证元素...

  • day14-12-集合框架(HashSet)

    |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复|--HashSet:底层数据结构是哈希表|...

  • HashSet和TreeSet有和异同2018-05-03

    相同点: 单列集合,元素不可重复 不同点 底层存储的数据结构不同HashSet底层用的是HashMap哈希表结构存...

  • Tourist with Data Structure Thir

    探索哈希表 概念 哈希集合:哈希集合是集合数据结构的实现之一,用于存储非重复值。哈希映射 :哈希映射是映射数据结构...

  • Set集合学习笔记

    不保证元素的元素的插入顺序,不可插入相同的元素 HashSet:底层数据结构是哈希表(数组+链表)+红黑树,实际上...

  • python 的集合操作 set

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了...

  • 2018-06-25 列表去重

    一个列表中的元素含有多个重复的元素,怎么去除重复的元素。一种是去除重复元素后但是顺序不保持一致,一致是去除后保持顺...

  • Set接口

    set:元素不可以重复,是无序。 set接口中的方法和Collection一致。 HashSet:内部数据结构是哈...

  • Set

    Set是元素无序并且不可以重复的集合,被成为集HashSet 哈希集,是Set的一个重要实现类 主要方法 bo...

网友评论

      本文标题:不可哈希的数据结构的重复元素去除方法

      本文链接:https://www.haomeiwen.com/subject/srijqttx.html