示例:
1 2 3 4 5 6 7 8 9 | 1、列表中有重复的元素 a = [1,5,2,1,9,1,5,10] 2、字典中有重复的键值对 a = [ {'x': 1,'y': 2}, {'x': 1,'y': 3}, {'x': 1,'y': 2}, {'x': 2,'y': 4} ] |
---|
针对这些,我们需要去重,并且还要保持原顺序不变,该如何操作呢?
这里我们使用函数来解决。
1、列表去重
1 2 3 4 5 6 7 8 9 10 | def dedupe(items): seen = set() for item in items: if item not in seen: yield item seen.add(item) a = [1,5,2,1,9,1,5,10] print(list(dedupe(a))) |
---|
先看下python中set()集合的特点
所以集合可以用来
yield的用法,可以参考另一篇博客:[yield][1]
2、字典去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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) a = [ {'x': 1,'y': 2}, {'x': 1,'y': 3}, {'x': 1,'y': 2}, {'x': 2,'y': 4} ] print(list(dedupe(a,key=lambda d : (d['x'],d['y'])))) |
---|