列表的反击

时间:2013-11-17 04:54:04

标签: python list counter

我有一个这样的计数器:

counter = Counter(['a','a','b','b','b','c'])

给出了这个对象:

Counter({'b': 3, 'a': 2, 'c': 1})

从中我想创建一个列表,如:

list[0] = 'b'
list[1] = 'a'
list[2] = 'c'

任何想法都可以做到最简单,最快捷的方式吗?感谢

5 个答案:

答案 0 :(得分:4)

你可以使用collections.Counter.most_common(它返回n个最常见元素的列表及其从最常见到最少的计数):

>>> counter.most_common()
[('b', 3), ('a', 2), ('c', 1)]

>>> [key for key, _ in counter.most_common()]
['b', 'a', 'c']

答案 1 :(得分:2)

最简单的(IMO)方法,如falsetru所述

sorted(counter, key=counter.get, reverse=True)

以上内容会根据键(dict)&的值来对计数器.get()进行排序。返回一个反转的list

答案 2 :(得分:0)

您可以将其转换为列表,但由于字典未排序,因此无法保留您想要的顺序:

list1 = list(counter)

答案 3 :(得分:0)

如果您想跳过可以输入的步骤。

list(set(['a','a','b','b','b','c']))

答案 4 :(得分:0)

你可以这样做:

from collections import Counter
import operator

counter = Counter(['a','a','b','b','b','c'])
print [k for k,v in sorted(counter.iteritems(), key=operator.itemgetter(1), reverse=True)]
# ['b', 'a', 'c']

或者,更好的是:

from collections import Counter

counter = Counter(['a','a','b','b','b','c'])
print [k for k,v in counter.most_common()]