2014-02-18 5 views
2

У меня есть список, содержащий несколько словарей. Каждый словарь будет иметь ключ даты и времени. Я пытаюсь выяснить, как печатать значения каждого словаря в строке в хронологическом порядке.Python список словарей, сортировка и печать значений по хронологическому заказу

Ниже приведен пример моего кода.

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

Я не нашел времени для форматирования вещей для вас, но вот быстрый и грязный способ их сортировки. Поскольку ваши даты отформатированы красиво, их можно легко отсортировать. Это не так эффективно, как другие ответы, потому что я строю совершенно новый словарь с избыточными данными.

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]) 
3

Ваши даты форматируются с использованием формата ISO8601, что делает их лексикографически сортируемыми.

Просто отсортировать список по Datetime ключу каждого словаря:

from operator import itemgetter 

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

Demo:

>>> 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'} 
Смежные вопросы