2013-05-27 3 views
2

가장 많이 사용되는 단어에 대한 사전을 만들고 상위 10 개를 구합니다. 목록에 정렬해야하는데 순서대로 정렬해야합니다. 내가 사용할 수없는 목록을 만들지 않고는 그렇게 할 수 없다. 여기 내 코드가있다. 나는 멀리 떨어져있어 사전을 분류 할 수는 없지만 여전히 도움이 필요하다.주파수 별 사전 구성

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

팁 : 삽입 순서대로 키를 유지하는 'OrderedDict'를 사용하십시오. –

답변

3

: 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) 
+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()을 붙이십시오. Docs에서

+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