我从一堆或电子邮件中读取数据并计算每个单词的频率。首先构建两个计数器:
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?还是其他方法?
答案 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')]