2013-05-27 63 views
2

我爲最常用的單詞創建了一本詞典,並獲得前十名。我需要對列表進行排序,這應該是有序的。如果沒有列出我無法使用的列表,我無法做到這一點。這是我的代碼。我離開字典不能排序,但我仍然需要幫助。按頻率組織詞典

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) 

我會怎麼做這樣的味精打印在頂部至少與這個詞的正確值的底部,從最常用的字,以字?

編輯:我知道字典不能自己排序,所以我可以以某種方式解決這個問題嗎?

+0

提示:使用OrderedDict它可以按照插入的順序保存鍵。 –

回答

3

Docsmost_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) 
+0

這是一個。非常感謝! – user2312690

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=Truesorted()

+2

最好在這裏使用'.most_common' – jamylak

+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