[英]sort a dict by a given list of key
我從一堆或電子郵件中讀取數據,並計算每個單詞的出現頻率。 首先構造兩個計數器:
counters.stats = collections.defaultdict(dict)
統計的關鍵是單詞。 對於每個單詞,我構建一個字典,其鍵是電子郵件的名稱,值是該電子郵件在該電子郵件中的出現頻率。
現在,我有一個列表,以不同的順序包含在counters.stats中的那些鍵。 我想按列表對“統計”中的關鍵字進行排序。
def print_stats(counters):
for form, cat_to_stats in sorted(counters.stats.items(), key = chi_sort):
如何建立功能chi_sort? 還是其他方法?
假設L
中的值僅出現一次:
D = dict((b,a) for a,b in enumerate(L))
chi_sort = D.get
L
是您的列表。
如果這產生相反的值,則可以通過在已sorted
調用中添加reversed=True
來解決此問題。
用這個:
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')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.