【问题标题】:Sorting a python dictionary of lists by date按日期对列表的python字典进行排序
【发布时间】:2014-06-10 21:16:53
【问题描述】:

我作为一名实习生正在编写一个 Django 项目。 我的 python 文件中有以下数据列表字典:

list_sequences = {'01': [["Calcul Red Shift", "2014-09-24", "Running"]],
                  '02': [["Calcul Dérive", "2014-09-22", "Stopped"]],
                  '03': [["Calcul simple", "2014-04-12", "Paused"]],
                  '04': [["Calcul Mental", "2014-02-14", "Failed"]],
                  '05': [["Sauvegarde des données", "2014-12-22", "Running"]],
                  '06': [["Envoi des données", "2014-07-17", "Stopped"]],
                  '07': [["Calcul de LA question", "2015-01-06", "Running"]],
                  '08': [["Refactorisation", "2014-09-24", "Paused"]],
                  '09': [["Cuisson de choucroute", "2013-11-13", "Running"]],
                  '10': [["Ecriture du rapport", "2014-02-03", "Running"]],
                  '11': [["Nettoyage des fichiers", "2014-09-24", "Paused"]],
                  '12': [["Création des utilisateurs", "2015-01-06", "Failed"]]
}

可以看到,每个元素的key是01,02,...

我也使用双 [[ ]] 因为我使用字符串,否则网页在表格单元格中只显示一个字符。

我想做的是按日期对整个字典进行排序。

我尝试了以下方法:

list_sequences = collections.OrderedDict(sorted(list_sequences.items(), key=lambda e: e[0][1]))

还有这个:

list_sequences = collections.OrderedDict(sorted(list_sequences.items(), key=lambda e: datetime.datetime.strptime(e[0][1], '%Y-%m-%d')))

但它似乎不起作用。第一个以一种奇怪的方式对我的列表进行排序,第二个给我一个:

time data '0' does not match format '%Y-%m-%d'

有什么想法吗?

非常感谢!

【问题讨论】:

    标签: python list sorting date dictionary


    【解决方案1】:

    dict.items() 返回 (key, value) 对,因此该值位于索引 1(e[1]) 而不是 0(e[0]) 处。您需要将e[0][1] 更改为e[1][0][1]

    演示:

    >>> OrderedDict(sorted(list_sequences.items(), key=lambda e:datetime.strptime(e[1][0][1], '%Y-%m-%d')))
    OrderedDict([('09', [['Cuisson de choucroute', '2013-11-13', 'Running']]), ('10', [['Ecriture du rapport', '2014-02-03', 'Running']]), ('04', [['Calcul Mental', '2014-02-14', 'Failed']]), ('03', [['Calcul simple', '2014-04-12', 'Paused']]), ('06', [['Envoi des donn\xc3\xa9es', '2014-07-17', 'Stopped']]), ('02', [['Calcul D\xc3\xa9rive', '2014-09-22', 'Stopped']]), ('11', [['Nettoyage des fichiers', '2014-09-24', 'Paused']]), ('01', [['Calcul Red Shift', '2014-09-24', 'Running']]), ('08', [['Refactorisation', '2014-09-24', 'Paused']]), ('05', [['Sauvegarde des donn\xc3\xa9es', '2014-12-22', 'Running']]), ('12', [['Cr\xc3\xa9ation des utilisateurs', '2015-01-06', 'Failed']]), ('07', [['Calcul de LA question', '2015-01-06', 'Running']])])
    

    【讨论】:

    • 完美运行,谢谢!我添加了一个“reverted”方法,以便最近的日期排在第一位: list_sequences = collections.OrderedDict(reversed(sorted(list_sequences.items(), key=lambda e: e[1][0][1]) ))
    • @Frankynov 您可以简单地将reverse=True 传递给sorted() 函数本身。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2016-05-13
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多