Python 3.5:按键对字典进行排序(日期) [英] Python 3.5: Sort dictionary by key (dates)

查看:76
本文介绍了Python 3.5:按键对字典进行排序(日期)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Python的新手,正在尝试按键对字典进行排序.键是日期时间对象.它适用于4月1日,4月2日和4月3日,但是它将4月4日放在1和2之间.我已经尝试过像

I'm new to Python and I'm trying to sort a dictionary by key. The keys are datetime objects. It works for 1 April, 2 April, 3 April, but it puts 4 april between 1 and 2. I've tried Ordereddict like described here.

我就是不明白.任何帮助表示赞赏...

I'm just don't getting it. Any help appreciated...

我的代码:

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函数:

The parse_date function:

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函数:

And the write_file function:

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

谢谢.

推荐答案

就像注释中所说的那样,字典对字符串进行排序,而不是对日期时间对象进行排序.因此解决方案是返回日期,并在写入文件功能中格式化日期.

Just like said in the comments, the dictionary sorted strings instead of datetime objects. So the solution is to return date, and format the date in the write file function.

感谢您的快速解答!

这篇关于Python 3.5:按键对字典进行排序(日期)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆