簡體   English   中英

按給定的鍵列表對字典進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM