我为最常用的单词创建一个字典并获得前十名。我需要为列表排序,这应该是有序的。如果没有列出我无法使用的列表,我就无法做到这一点。这是我的代码。我离开了词典无法排序,但我仍然需要帮助。
most_used_words = Counter()
zewDict = Counter(most_used_words).most_common(10)
newDict = dict(zewDict)
keys = newDict.keys()
values = newDict.values()
msg = ('Here is your breakdown of your most used words: \n\n'
'Word | Times Used'
'\n:--:|:--:'
'\n' + str(keys[0]).capitalize() + '|' + str(values[0]) +
'\n' + str(keys[1]).capitalize() + '|' + str(values[1]) +
'\n' + str(keys[2]).capitalize() + '|' + str(values[2]) +
'\n' + str(keys[3]).capitalize() + '|' + str(values[3]) +
'\n' + str(keys[4]).capitalize() + '|' + str(values[4]) +
'\n' + str(keys[5]).capitalize() + '|' + str(values[5]) +
'\n' + str(keys[6]).capitalize() + '|' + str(values[6]) +
'\n' + str(keys[7]).capitalize() + '|' + str(values[7]) +
'\n' + str(keys[8]).capitalize() + '|' + str(values[8]) +
'\n' + str(keys[9]).capitalize() + '|' + str(values[9]))
r.send_message(user, 'Most Used Words', msg)
我该如何操作,以便msg按照从顶部最常用的单词到底部最少的单词的顺序打印出单词的正确值?
编辑:我知道字典无法自行排序,所以我能以某种方式解决这个问题吗?
答案 0 :(得分:4)
一旦你拥有了values
就像它一样简单:
print('Word | Times Used')
for e, t in collections.Counter(values).most_common(10):
print("%s|%d" % (e,t))
打印类似:
Word | Times Used
e|4
d|3
a|2
c|2
答案 1 :(得分:3)
来自Docs:most_common([n])
从中返回n个最常见元素及其计数的列表 最常见的。如果未指定n,则返回most_common() 柜台中的所有元素。订购具有相同计数的元素 任意:
>>> Counter('abracadabra').most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
您的代码可以是:
from collections import Counter
c = Counter(most_used_words)
msg = "Here is your breakdown of your most used words:\n\nWords | Times Used\n:--:|:--:\n"
msg += '\n'.join('%s|%s' % (k.capitalize(), v) for (k, v) in c.most_common(10))
r.send_message(user, 'Most Used Words', msg)
答案 2 :(得分:2)
import operator
newDict = dict(zewDict)
sorted_newDict = sorted(newDict.iteritems(), key=operator.itemgetter(1))
msg = ''
for key, value in sorted_newDict:
msg.append('\n' + str(key).capitalize() + '|' + str(value))
这将按字典值排序。如果您希望以其他顺序添加reverse=True
到sorted()
。