2012-05-06 3 views
0

Я прочитал данные из группы или электронной почты и подсчитал частоту каждого слова. сначала построить два прилавка:sort a dict по данному списку ключей

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? Или другие методы?

+1

возможно дубликат [отсортирован в Dict по значению] (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 происходят только один раз:

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

где L относится к вашему списку.

Если это дает значения в обратном порядке, вы можете исправить это, добавив reversed=True к вашему звонку sorted.

0

Используйте это:

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

(Заменить your_list_here со списком)

Пример (collections.OrderedDict может быть заменен нормальным dict):

>>> 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')] 
Смежные вопросы