Python列表的字典,按时间顺序排序和打印值

时间:2014-02-18 00:55:26

标签: python python-2.7 python-datetime

我有一个包含多个词典的列表。每个词典都有一个日期和时间键。我想弄清楚的是如何按时间顺序将每个字典的值打印到一行。

以下是我的代码示例。

list_of_dicts = []

dict1 = {'Source': 'Log1', 'Type': 'Connection', 'Datetime': '2014-02-13 14:10:00', 'fullpath':'N/A'}
dict2 = {'Source': 'Log2', 'Type': 'Disconnect', 'Datetime': '2014-05-13 11:00:00', 'fullpath':'N/A'}
dict3 = {'Source': 'Log4', 'Type': 'Other', 'Datetime': '2014-05-10 02:50:00', 'fullpath':'N/A'}

list_of_dicts.append(dict1)
list_of_dicts.append(dict2)
list_of_dicts.append(dict3)

预期输出如下:

Datetime                Source  Type        Fullpath
2014-02-13 14:10:00     Log1    Connection  N/A
2014-05-10 02:50:00     Log4    Other       N/A
2014-05-13 11:00:00     Log2    Disconnect  N/A

我非常感谢任何人对此的指导。非常感谢。

3 个答案:

答案 0 :(得分:3)

您的日期使用ISO8601格式进行格式化,使其按字典顺序排序。

只需在每个词典的Datetime键上对列表进行排序:

from operator import itemgetter

for entry in sorted(list_of_dicts, key=itemgetter('Datetime')):
    # format your output

演示:

>>> list_of_dicts = [
...     {'Source': 'Log1', 'Type': 'Connection', 'Datetime': '2014-02-13 14:10:00', 'fullpath':'N/A'},
...     {'Source': 'Log2', 'Type': 'Disconnect', 'Datetime': '2014-05-13 11:00:00', 'fullpath':'N/A'},
...     {'Source': 'Log4', 'Type': 'Other', 'Datetime': '2014-05-10 02:50:00', 'fullpath':'N/A'},
... ]
>>> from operator import itemgetter
>>> for entry in sorted(list_of_dicts, key=itemgetter('Datetime')):
...     print entry
... 
{'Source': 'Log1', 'fullpath': 'N/A', 'Type': 'Connection', 'Datetime': '2014-02-13 14:10:00'}
{'Source': 'Log4', 'fullpath': 'N/A', 'Type': 'Other', 'Datetime': '2014-05-10 02:50:00'}
{'Source': 'Log2', 'fullpath': 'N/A', 'Type': 'Disconnect', 'Datetime': '2014-05-13 11:00:00'}

答案 1 :(得分:0)

http://docs.python.org/2/library/functions.html#sorted与lambda函数一起使用。它适用于更深层次嵌套的词典。

sorted_entries = sorted(list_of_dicts,key=lambda x:x['Datetime'])

答案 2 :(得分:0)

我没有花时间为你设计漂亮的东西,但是这里有一种快速而肮脏的方法来对它们进行排序。由于您的日期格式很好,因此可以轻松排序。这不如其他答案有效,因为我正在构建一个包含冗余数据的全新字典。

list_of_dicts = []

dict1 = {'Source': 'Log1', 'Type': 'Connection', 'Datetime': '2014-02-13 14:10:00', 'fullpath':'N/A'}
dict2 = {'Source': 'Log2', 'Type': 'Disconnect', 'Datetime': '2014-05-13 11:00:00', 'fullpath':'N/A'}
dict3 = {'Source': 'Log4', 'Type': 'Other', 'Datetime': '2014-05-10 02:50:00', 'fullpath':'N/A'}

list_of_dicts.append(dict1)
list_of_dicts.append(dict2)
list_of_dicts.append(dict3)

d = {d['Datetime']:d for d in list_of_dicts} # dictionary comprehension

for k in sorted(d.keys()):
    print(d[k])