按给定的密钥列表对字典进行排序

时间:2012-05-06 05:46:21

标签: python

我从一堆或电子邮件中读取数据并计算每个单词的频率。首先构建两个计数器:

counters.stats = collections.defaultdict(dict)

统计数据的关键是单词。对于每个单词,我构造一个dict,其键是电子邮件的名称,值是此电子邮件中该单词的频率。

现在我有一个列表,其中包含counter.stats中的那些键,顺序不同。我想按列表对“统计数据”中的键进行排序。

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

如何构建函数chi_sort?还是其他方法?

2 个答案:

答案 0 :(得分:1)

假设L中的值只出现一次:

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

其中L表示您的列表。

如果这会以相反的顺序生成值,您可以通过在reversed=True来电中添加sorted来解决此问题。

答案 1 :(得分: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')]