Python 3.x 如何根据特定列对列表的字典进行排序?
我有一张如下的表格,储存在字典里: 这本字典看起来像这样Python 3.x 如何根据特定列对列表的字典进行排序?,python-3.x,sorting,dictionary,Python 3.x,Sorting,Dictionary,我有一张如下的表格,储存在字典里: 这本字典看起来像这样 d = { 'A': ['45', '70', '5', '88', '93', '79', '87', '69'], 'B': ['99', '18', '91', '3', '92', '2', '67', '15'], 'C': ['199200128', '889172415', '221388292', '199200128', '889172415', '889172415', '199200128', '2213882
d = {
'A': ['45', '70', '5', '88', '93', '79', '87', '69'],
'B': ['99', '18', '91', '3', '92', '2', '67', '15'],
'C': ['199200128', '889172415', '221388292', '199200128', '889172415', '889172415', '199200128', '221388292'],
'D': ['10:27:05', '07:10:29', '17:04:48', '10:25:42', '07:11:18', '07:11:37', '10:38:11', '17:08:55'],
'E': ['73', '6', '95', '21', '29', '15', '99', '9']
}
我想根据从最低到最高的小时数对字典进行排序,并将A、B和E列相加,对应于下图中C列中相同的值(其中A、B和E的总和为红色):
然后,生成的字典如下所示:
{
'A': ['70', '93', '79', '242', '88', '45', '133', '87', '5', '69', '161'],
'B': ['18', '92', '2', '112', '3', '99', '102', '67', '91', '15', '173'],
'C': ['889172415', '889172415', '889172415', '', '199200128', '199200128', '', '199200128', '221388292', '221388292', ''],
'D': ['07:10:29', '07:11:18', '07:11:37', '', '10:25:42', '10:27:05', '', '10:38:11', '17:04:48', '17:08:55', ''],
'E': ['6', '29', '15', '50', '21', '73', '94', '99', '95', '9', '203']
}
我目前试图用这段代码对输入字典进行排序,但似乎不适合我
排序(d.items(),key=lambda e:e[1][4])
[
('D',['10:27:05','07:10:29','17:04:48','10:25:42','07:11:18','07:11:37','10:38:11','17:08:55'],
(‘E’、[‘73’、‘6’、‘95’、‘21’、‘29’、‘15’、‘99’、‘9’),
(‘C’、‘199200128’、‘889172415’、‘221388292’、‘199200128’、‘889172415’、‘889172415’、‘199200128’、‘221388292’),
(‘B’、[‘99’、‘18’、‘91’、‘3’、‘92’、‘2’、‘67’、‘15’),
('A'、['45'、'70'、'5'、'88'、'93'、'79'、'87'、'69')
]
>>>
也许有人能帮点忙。谢谢您允许使用熊猫解决此任务吗? 如果是,则可以将数据转换为
pd.DataFrame
反对
data = pd.DataFrame.from_dict(dictionary, orient = 'columns')
data = data.sort_values(by =„D”)
然后再次使用返回字典
_dict = data.to_dict()
谢谢你的回答。我已经尝试过了,排序也很有效,但当我使用'pd.DataFrame.from_dict(dictionary)`时,它会生成一个带有索引的列,排序时,该列是未排序的(
data.to_dict()
)。有没有办法避免生成那个索引列,因为我看到有那个额外的列需要对de值求和更复杂。我只是通过添加orient='columns'
参数来更新答案。输出仍然相同。无论如何,谢谢你的帮助。