Python 与列表相反
我有一个这样的柜台:Python 与列表相反,python,list,counter,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' 有什么想法可以用最简单最快的方式来做吗?感谢falsetru告诉我们的最简单(IMO)方法 sorted(counter, key=counter.get, reverse=Tru
counter = Counter(['a','a','b','b','b','c'])
这就给了这个对象:
Counter({'b': 3, 'a': 2, 'c': 1})
我想从中创建一个列表,例如:
list[0] = 'b'
list[1] = 'a'
list[2] = 'c'
有什么想法可以用最简单最快的方式来做吗?感谢falsetru告诉我们的最简单(IMO)方法
sorted(counter, key=counter.get, reverse=True)
上面的操作将根据键的值(
.get()
)对计数器进行排序dict
),并返回一个反向的列表
,您可以将其强制转换为列表,但它不会保持您想要的顺序,因为字典是未排序的:
list1 = list(counter)
您可以使用(返回n个最常见元素的列表及其从最常见到最少的计数):
如果要跳过这些步骤,可以键入
list(set(['a','a','b','b','b','c']))
您可以这样做:
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()]
列表元素的顺序是什么?你试过什么?谢谢Ashish,这就是我要找的,除了你的代码给了我升序,我能做些什么才能得到降序呢?或者,你可以做
reversed(sorted(counter.keys(),key=lambda x:counter[x])
可以缩短为sorted(counter,key=counter.get,reverse=True)
;排序
接收任何iterable。(迭代字典产生键)@falsetru谢谢,不知道。get()
可以这样使用。我没说它是最快的。这不是最短的一个。;)
from collections import Counter
counter = Counter(['a','a','b','b','b','c'])
print [k for k,v in counter.most_common()]