列出一个列表,按人气排序,然后删除重复项

时间:2011-02-01 11:13:26

标签: python

  

可能重复:
  In python, how do I take the highest occurrence of something in a list, and sort it that way?

大家好,

我正在寻找一种按流行度排序列表的简单方法,然后删除重复的元素。

例如,给出一个列表:

[8, 8, 1, 1, 5, 8, 9]

然后我会得到如下列表:

[8, 1, 5, 9]

2 个答案:

答案 0 :(得分:13)

>>> lst = [1, 1, 3, 3, 5, 1, 9]
>>> from collections import Counter
>>> c = Counter(lst)
>>> [i for i, j in c.most_common()]
[1, 3, 5, 9]

请参阅collections.Counter文档,了解与旧版兼容实施的链接。

答案 1 :(得分:12)

@SilentGhost为Python 2.7+提供了出色的解决方案。适用于2.6及更早版本的相对简单的解决方案:

a = [8, 8, 1, 1, 5, 8, 9]

popularity = sorted(set(a), key=lambda x: -a.count(x))

[8, 1, 5, 9]

然而,这个解决方案很昂贵(因为count)。

这是另一个更好的临时字典解决方案:

a = [8, 8, 1, 1, 5, 8, 9]
d = {}
for i in a:
    d[i] = d.get(i, 0) + 1
popularity = sorted(d, key=d.get, reverse=True)