Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按给定的键列表对dict进行排序_Python - Fatal编程技术网

Python 按给定的键列表对dict进行排序

Python 按给定的键列表对dict进行排序,python,Python,我从一堆或几封电子邮件中读取数据,并计算每个单词的频率。首先构造两个计数器: counters.stats = collections.defaultdict(dict) 统计的关键是单词。对于每个单词,我构造一个dict,其键是电子邮件的名称,值是该单词在该电子邮件中的频率 现在我有一个列表,其中包含counters.stats中的键,按不同的顺序排列。我想按列表对“stats”中的键进行排序 def print_stats(counters): for form, cat_to_s

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

counters.stats = collections.defaultdict(dict)
统计的关键是单词。对于每个单词,我构造一个dict,其键是电子邮件的名称,值是该单词在该电子邮件中的频率

现在我有一个列表,其中包含counters.stats中的键,按不同的顺序排列。我想按列表对“stats”中的键进行排序

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

如何构建函数chiu_sort?或其他方法?

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

D = dict((b,a) for a,b in enumerate(L))
chi_sort = D.get
其中
L
指的是您的列表

如果这会以相反的顺序生成值,您可以通过将
reversed=True
添加到
排序的
调用中来解决此问题。

使用以下方法:

chi_sort = lambda item: your_list_here.index(item[0])
(此处用您的列表替换
您的列表)

示例(
collections.OrderedDict
可以用普通的
dict
替换):


如果我理解正确,您有一个dict:mydict={a:5,b:2,c:3},需要按值排序。这个怎么样:排序(mydict.items(),key=lambda x:x[1])
>>> 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')]