2016-04-04 15 views
0

私はPythonを初めて使い、キーで辞書をソートしようとしています。キーは日時オブジェクトです。 4月1日、4月3日、4月4日に動作しますが、4月4日を1と2の間にします。here.Python 3.5:キーで辞書をソートする(日付)

私はちょうどそれを手に入れません。すべてのヘルプは...感謝

マイコード:

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") 

PrintScreenを:http://prntscr.com/ao6qst

ありがとうございます。

+1

あなたの出力からは、出力が日付でソートされていない(数字のように)が、辞書順にソートされているようです。つまり、 'F'は' M'の前に 'S'よりも前に来ます。 – Dzhao

+2

非常に簡単です。' datetime'オブジェクトは、書式設定する代わりにキーとして保管してください。 formatted_date = date.strftime( "%a、%d%b%Y%H:%M:%S") 'と' return date'という行をコメントアウトしてください。 –

+0

それは意味がある...私は今まで気付かなかった..ありがとう! – JC97

答えて

0

コメントと同様に、辞書はdatetimeオブジェクトではなく文字列をソートしました。だから解決策は、日付を返し、書式ファイル関数で日付をフォーマットすることです。

ありがとうございました!

関連する問題