我有一个包含多个词典的列表。每个词典都有一个日期和时间键。我想弄清楚的是如何按时间顺序将每个字典的值打印到一行。
以下是我的代码示例。
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
我非常感谢任何人对此的指导。非常感谢。
答案 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])