2012-05-06 3 views
0

한 묶음이나 이메일에서 데이터를 읽고 각 단어의 빈도를 계산합니다. 먼저 두 개의 카운터를 구성하십시오.주어진 키 목록으로 사전을 정렬하십시오.

counters.stats = collections.defaultdict(dict) 

통계의 키는 단어입니다. 각 단어에 대해 나는 전자 메일의 이름을 키로 사용하는 dict을 만들고 값은이 전자 메일에서 해당 단어의 빈도를 나타냅니다.

이제 counters.stats에있는 키가 다른 순서로 포함 된 목록이 있습니다. 목록에서 '통계'키를 정렬하고 싶습니다.

def print_stats(counters): 
    for form, cat_to_stats in sorted(counters.stats.items(), key = chi_sort): 

어떻게 chi_sort 함수를 빌드하나요? 아니면 다른 방법?

D = dict((b,a) for a,b in enumerate(L)) 
chi_sort = D.get 

L이 목록에 의미 여기서

+1

중복 가능성이 DICT을 분류 : (목록에 your_list_here 교체)

예 (collections.OrderedDict 정상적인 dict로 대체 될 수있다)

chi_sort = lambda item: your_list_here.index(item[0]) 

가치에 의해] (http://stackoverflow.com/questions/10463442/sorted-a-dict-by-value) – senderle

+0

내가 올바르게 이해한다면, 당신은 dict을 가지고있다 : mydict = {a : 5, b : 2 , c : 3} 값으로 정렬해야합니다. 이것에 대해 : sorted (mydict.items(), key = lambda x : x [1]) –

답변

1

L의 값이 한 번만 발생한다고 가정.

역순으로 값을 산출하는 경우 sorted 호출에 reversed=True을 추가하여 수정할 수 있습니다.

0

사용이 : [의

>>> import collections 
>>> ordereddict = collections.OrderedDict((
...  ('key_78', 'value'), 
...  ('key_40', 'value'), 
...  ('key_96', 'value'), 
...  ('key_53', 'value'), 
...  ('key_04', 'value'), 
...  ('key_89', 'value'), 
...  ('key_52', 'value'), 
...  ('key_86', 'value'), 
...  ('key_16', 'value'), 
...  ('key_63', 'value'), 
...)) 
>>> 
>>> alist = sorted(ordereddict.keys()) 
>>> alist 
['key_04', 'key_16', 'key_40', 'key_52', 'key_53', 'key_63', 'key_78', 'key_86', 
'key_89', 'key_96'] 
>>> sorted(ordereddict.items(), key=lambda item: alist.index(item[0])) 
[('key_04', 'value'), ('key_16', 'value'), ('key_40', 'value'), ('key_52', 'valu 
e'), ('key_53', 'value'), ('key_63', 'value'), ('key_78', 'value'), ('key_86', ' 
value'), ('key_89', 'value'), ('key_96', 'value')] 
관련 문제