给一个列表去重复却又要保留顺序


collections.OrderedDict.fromkeys(list).keys()

在 Python 中,有时候有需要用到保留原始顺序而又能去掉重复的列表。

而在 Python 自身的基本数据结构里面,给 list 去除重复可以用 set(list) 来进行操作而得到一个没有重复的set集合,但是这样也就把list元素原有的先后出现的顺序而被打乱了,打的乱七八糟的。

会写 Python 的也可能会找到很多的解决办法,有容易的有复杂的有高级的。

我的方法

在 Python 的 collections 包里面有个数据结构叫 OrderedDict,有序字典。

字典的 key 有个特性是不会重复,Python 默认的字典的 key 也是无序的,这是由它本身的特性决定的,但是有人结合了 list 的特性,制造了这个有序字典的数据结构,它输出的 key 和 value 都是有序的。

所以利用它的这些特性,这样理论上就会很容易就能得到有序的没有重复的 list 了。

import collections
datalist = ['1', '4', '3', '2', '2', '4']
newlist = collections.OrderedDict.fromkeys(datalist).keys()
print(newlist)
['1', '4', '3', '2']

这样就能得到一个保留元素第一次出现的先后顺序又去除了重复元素的list了。一般用来给人查看或者是显示操作结果的时候,是对人很友好的。

好了,这里其实是第一次正经测试 Markdown 语法来写文章的内容,目前看起来貌似还蛮美观的吭。