2014-02-18 82 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 

演示:

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