Python 3.5:按键排序字典(日期)

时间:2016-04-04 21:10:33

标签: python sorting python-3.x dictionary

我是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

提前致谢。

1 个答案:

答案 0 :(得分:0)

就像评论中所说的那样,字典对字符串进行排序而不是日期时间对象。所以解决方案是返回日期,并在写文件函数中格式化日期。

感谢快速回答!