2017-07-04 5 views
-1

データベースの日付がいくつか取得されていて、混乱することがあります。 私はpython datetimeが正しくソートされていない

datelist = ["1 2017", "2 2017", "6 2017", "7 2017", "8 2017", "3 2017", "4 2017", "5 2017", "9 2017", "10 2017", "11 2017", "12 2017"] 

for i in sorted(datelist): 
     print(i) 

定期的にこれらの日付を印刷するソート()メソッドを使用しますが、結果はひどい..です!

1 2017 
10 2017 
11 2017 
12 2017 
2 2017 
3 2017 
4 2017 
5 2017 
6 2017 
7 2017 
8 2017 
9 2017 

これらの値を定期的に取得するにはどうすればよいですか? お返事ありがとうございます

+1

彼らはdatetimesではありません。彼らは弦です。だから彼らは文字列のようにソートされています。 – khelwood

+0

https://stackoverflow.com/questions/17627531/sort-list-of-date-strings – kingdaemon

+0

私はこれらの日付をスピンボックスでデータベースに保存しています。これはstrである可能性があります。私はTkinterを使用しており、日付を選択して保存する別の方法は見つかりませんでした。再度、アドバイスをありがとう。 – scan

答えて

1

文字列の値に対してソートを実行しているため、文字列の並べ替えはlexicographicallyで行われています。

>>> datelist = ["1 2017", "2 2017", "6 2017", "7 2017", "8 2017", "3 2017", "4 2017", "5 2017", "9 2017", "10 2017", "11 2017", "12 2017"] 

>>> sorted(datelist, key=lambda x: [int(y) for y in x.split()]) 
['1 2017', '2 2017', '3 2017', '4 2017', '5 2017', '6 2017', '7 2017', '8 2017', '9 2017', '10 2017', '11 2017', '12 2017'] 
+0

それは働いた:Dありがとう.. – scan

2

ソート文字列を解析するためにsortedkeyパラメータを使用して:数値の昇順でリスト内の文字列をソートするためには、としてsortedラムダ関数としてkey引数を渡すことができますdatetimeによって:

from datetime import datetime 
datelist = ["1 2017", "2 2017", "6 2017", "7 2017", "8 2017", "3 2017", "4 2017", "5 2017", "9 2017", "10 2017", "11 2017", "12 2017"] 
for i in sorted(datelist,key=lambda s: datetime.strptime(s,'%m %Y')): 
    print(i) 

出力:

1 2017 
2 2017 
3 2017 
4 2017 
5 2017 
6 2017 
7 2017 
8 2017 
9 2017 
10 2017 
11 2017 
12 2017 
+0

ありがとうso much much :) – scan

+0

はい、これは私が "1 2018"、 "2 2018"を追加すると良いでしょう:) – scan

関連する問題