【发布时间】:2016-07-24 14:25:05
【问题描述】:
我是 Python 新手,我正在尝试按键对字典进行排序。键是日期时间对象。它适用于 4 月 1 日、4 月 2 日、4 月 3 日,但它会将 4 月 4 日置于 1 日至 2 日之间。我已经尝试过 Ordereddict,如 here. 所述。
我只是不明白。任何帮助表示赞赏...
我的代码:
for part in msg.walk():
if partNum == 0:
rawDate = part['Date']
date = parse_date(rawDate)
if part.get_content_type() == 'text/plain':
content = part.get_payload()
splitted_content = content.split('\r\n')
pending_tb = str(splitted_content[8])[70:].strip()
if partNum == 2:
values[date] = pending_tb
#TODO sort by date
partNum += 1
write_file(OrderedDict(sorted(values.items(), key=lambda t: t[0])))
parse_date 函数:
def parse_date(rawdate):
date_tuple = email.utils.parsedate_tz(rawdate)
if date_tuple:
date = datetime.datetime.fromtimestamp(email.utils.mktime_tz(date_tuple))
formatted_date = date.strftime("%a, %d %b %Y %H:%M:%S")
return formatted_date
else:
print("ERROR: kon datum niet parsen.")
exit(-1)
还有write_file函数:
def write_file(values):
filepath = "temp.csv"
file = open(filepath, "a+")
for k,v in sorted(values.items()):
if len(k) > 0:
file.write(k + "\t\t" + v + "\n")
输出的打印屏幕:http://prntscr.com/ao6qst
提前致谢。
【问题讨论】:
-
从您的输出中,在我看来,输出不是按日期排序(如数字),而是按字典顺序排序。即,
F出现在M之前,S之前出现 -
非常简单,将
datetime对象保留为键而不是格式化它们。所以注释掉formatted_date = date.strftime("%a, %d %b %Y %H:%M:%S")和return date。 -
有道理...直到现在我才注意到...非常感谢!
-
您应该接受您的回答,这样该问题就不会留在未回答列表中。为此,请单击您的答案投票数下方的灰色复选标记。
-
保持日期为
datetime和sorted(dict)按键排序。
标签: python sorting python-3.x dictionary