0

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

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?还是其他方法?

4

2 回答 2

1

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

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

whereL指的是您的列表。

如果这以相反的顺序产生值,您可以通过添加reversed=True到您的sorted调用来解决该问题。

于 2012-05-06T05:58:16.090 回答
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')]
于 2014-05-10T21:34:56.027 回答