Python 字典中的按值排序

Python 字典中的按值排序,python,dictionary,Python,Dictionary,我只是在练习python。我有一本字典,格式如下: my_dict = [{'word': 'aa', 'value': 2}, {'word': 'aah', 'value': 6}, {'word': 'aahed', 'value': 9}] 我该如何订购这本词典,这样,如果我有数千个单词,我就能够根据它们的价值排名来选择前100名?e、 例如,仅根据上述示例: scrabble_rank = [{'word': 'aahed', 'ran

我只是在练习python。我有一本字典,格式如下:

my_dict = [{'word': 'aa', 'value': 2}, 
           {'word': 'aah', 'value': 6}, 
           {'word': 'aahed', 'value': 9}]
我该如何订购这本词典,这样,如果我有数千个单词,我就能够根据它们的价值排名来选择前100名?e、 例如,仅根据上述示例:

scrabble_rank = [{'word': 'aahed', 'rank': 1},
                 {'word': 'aah', 'rank': 2}, 
                 {'word': 'aa', 'rank': 3}]

首先,那不是一本字典;这是一份字典清单。这很好,因为字典是无序的,但列表是有序的

您可以使用
rank
元素的值作为排序函数的键,对列表进行排序:

scrabble_rank.sort(key=lambda x: x['value'])

首先,那不是一本字典;这是一份字典清单。这很好,因为字典是无序的,但列表是有序的

您可以使用
rank
元素的值作为排序函数的键,对列表进行排序:

scrabble_rank.sort(key=lambda x: x['value'])

这就是你想要的吗:

scrabble_rank = [{'word':it[1], 'rank':idx+1} for idx,it in enumerate(sorted([[item['value'],item['word']] for item in my_dict],reverse=True))]

这就是你想要的吗:

scrabble_rank = [{'word':it[1], 'rank':idx+1} for idx,it in enumerate(sorted([[item['value'],item['word']] for item in my_dict],reverse=True))]

使用
Pandas
库:

import pandas as pd
有一条班轮:

scrabble_rank = pd.DataFrame(my_dict).sort_values('value', ascending=False).reset_index(drop=True).reset_index().to_dict(orient='records')
它输出:

[{'index': 0, 'value': 9, 'word': 'aahed'},
 {'index': 1, 'value': 6, 'word': 'aah'},
 {'index': 2, 'value': 2, 'word': 'aa'}]

基本上,它将您的记录读取到一个数据帧中,然后按
值按降序排序,然后删除原始索引(顺序),然后将其导出为记录(您以前的格式)。

使用
Pandas
库:

import pandas as pd
有一条班轮:

scrabble_rank = pd.DataFrame(my_dict).sort_values('value', ascending=False).reset_index(drop=True).reset_index().to_dict(orient='records')
它输出:

[{'index': 0, 'value': 9, 'word': 'aahed'},
 {'index': 1, 'value': 6, 'word': 'aah'},
 {'index': 2, 'value': 2, 'word': 'aa'}]
基本上,它将您的记录读入数据框,然后按值降序排序,然后删除原始索引(顺序),然后导出为记录(以前的格式)。

您可以使用:

您可以使用:


嗯,这很酷-我接受,但这是从“最差”到“最佳”的排序值-所以对于值为2、5、8的三个项目,它应该从8、5、2-最高到最低…我可以使用reverse=True作为排序函数的参数之一。@MichaelRoberts使用
my_dict.sort(key=lambda x:-x['value'])
Trickhmm,这很酷-我可以接受,但这是从“最坏”到“最佳”值排序的-因此对于值为2、5、8的三个项目,它的顺序应该是8、5、2-从高到低…我可以使用reverse=True作为排序函数的参数之一。@MichaelRoberts使用
my_dict.sort(key=lambda x:-x['value'])
实现了这一技巧