簡體   English   中英

python:使用datetime作為關鍵字對字典進行排序

[英]python : sorting a dictionary using datetime as key

我正在嘗試從具有以下毫秒時間戳的日志文件中讀取內容,然后將其插入基於“ st_time”作為鍵的字典中。

st_time = datetime.strptime(t_str[0],"%d/%b/%Y %H:%M:%S.%f")
final_dict[st_time] = line
for key in sorted(final_dict.iterkeys()):
    print "%s : %s" %(key,final_dict[key])

但是我在下面得到這個錯誤

for key in sorted(final.iterkeys()):


TypeError: can't compare datetime.datetime to tuple

示例:日志文件中的條目

Jul  1 03:27:12 syslog: [m_java]**[ 1/Jul/2013 03:27:12.818]**[j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7)

t_str[0] --> ['29/Jun/2013 01:16:06.149']

st_time --> 2013-06-29 01:16:06.149000

謝謝你的幫助!

st_time = datetime.strptime(t_str[0],"%d/%b/%Y %H:%M:%S.%f")
key = float(time.mktime(st_time.timetuple()) + st_time.microsecond / 1000000.0)
final_dict[key] = line
for key in sorted(final_dict.iterkeys()):
    print "%s : %s" %(key,final_dict[key])

您出錯的原因是strptime返回struct_time。 將其轉換為UNIX時間戳(將是浮點型)應該可以使您更輕松地進行排序。

如果您使用字典並希望以任何方式對其進行排序,那么您使用的是錯誤的數據類型。

字典還有許多其他子類型,它們確實支持排序,但是我建議改用二元素元組。

sorted_times = sorted([(k, v) for k, v in final_dict.items()])

它將自動在每個元組的第一個條目上排序,該條目應為日期時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM