【问题标题】:How to sort dictionary of list based on certain column?如何根据特定列对列表字典进行排序?
【发布时间】:2020-11-01 10:56:53
【问题描述】:

我有一个如下表,存储在字典中:

字典是这样的

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']
}

我想根据小时数从最低到最高对字典进行排序,并将对应于 C 列中相同值的列 A、B 和 E 相加,如下图所示(其中 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']
}

我目前尝试使用此代码对输入字典进行排序,但似乎对我不起作用。

>>> sorted(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'])
]
>>>

请有人对此提供一些帮助。谢谢

【问题讨论】:

    标签: python-3.x sorting dictionary


    【解决方案1】:

    你允许使用 pandas 来解决这个任务吗? 如果是,那么您可以将数据转换为

    pd.DataFrame 
    

    对象

    data = pd.DataFrame.from_dict(dictionary, orient = 'columns')
    data = data.sort_values(by =„D”)
    

    然后再次使用返回字典

    _dict = data.to_dict() 
    

    【讨论】:

    • 感谢 s3nh 的回答。我已经尝试过并且它的排序工作,但是当我执行 `pd.DataFrame.from_dict(dictionary)` 时,它会生成一个带有索引的列,并且在排序时,该列是未排序的 (data.to_dict())。有没有办法避免生成该索引列,因为我发现需要额外的列来求和更复杂的值。
    • 我只是通过添加orient = 'columns' 参数来更新答案。
    • 还是一样的输出。无论如何感谢您的帮助。
    猜你喜欢
    • 2011-04-03
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2014-07-13
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多