可能重复:
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]
答案 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)