我需要按照发生次数最多到最少发生的顺序向文件写入一个计数器,但我遇到了一些麻烦。当我打印计数器时,它会按顺序打印,但是当我调用counter.items()
然后将其写入文件时,它会将它们乱序写入。
我试图让它像这样:
word 5
word2 4
word3 4
word4 3
我需要按照发生次数最多到最少发生的顺序向文件写入一个计数器,但我遇到了一些麻烦。当我打印计数器时,它会按顺序打印,但是当我调用counter.items()
然后将其写入文件时,它会将它们乱序写入。
我试图让它像这样:
word 5
word2 4
word3 4
word4 3
我建议你使用collections.Counter
然后Counter.most_common
会做你正在寻找的东西:
演示:
>>> c = Counter('abcdeabcdabcaba')
>>> c.most_common()
[('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)]
将其写入文件:
c = Counter('abcdeabcdabcaba')
with open("abc", 'w') as f:
for k,v in c.most_common():
f.write( "{} {}\n".format(k,v) )
帮助Counter.most_common
:
>>> Counter.most_common?
Docstring:
List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.
>>> Counter('abcdeabcdabcaba').most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
from operator import itemgetter
print sorted( my_counter.items(),key=itemgetter(1),reverse=True)
应该可以正常工作:)
字典没有顺序,这就是计数器的含义,因此如果您希望按某种顺序对项目列表进行排序......在这种情况下,按“值”而不是“键”排序