美文网首页
python 序列去重

python 序列去重

作者: 绿林好汉_文武 | 来源:发表于2016-12-01 12:42 被阅读0次

需求:

我们想去除序列中出现的重复元素,但仍然保证剩下的元素顺序不变。如果想要做的只是去除重复项,通常构建一个集合就可以做到,但是集合不能保证元素间的顺序不变,因此得到的结果会被打乱,下面展示的函数可以很好的解决:

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)

这里的参数key的作用是指定一个函数来将序列中的元素转换为可哈希的类型,这么做的目的是为了检测重复项。它可以这样工作:

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

list(dedupe(a,key=lambda i: (i['x'],i['y'])))

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

list(dedupe(a,key=lambda i: i['x']))

这个函数可以通用,比如想读一个文件,去除其中重复的文本行,可以只需这样处理:

with open(somefile,'r') as f:

    for line in dedupe(f):

以上内容摘自《python cookbook》ff

相关文章

网友评论

      本文标题:python 序列去重

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