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

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

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,使用起来很方便。

你可能感兴趣的:(不可哈希的数据结构的重复元素去除方法)