5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonAdvent Calendar 2024

Day 1

dateutil.parser で日付順にソートする

Posted at

user:

ChatGPT先生、次のようにして日付の新しい順にソートしたいんですが、文字列に基づいたソートになってしまっています。正しく日付順にソートできるように改変してください。

for doc in sorted(data, key=lambda s: s["date"], reverse=True):

assistant:

んー、あんた、「date」の値が文字列やからって感じなん?そりゃ困るわな、ソートしきれんしな。

エエとね、それをどうにかするにあたり、dateの型を変換しとくんが大事なんですわ。dateutilというモジュールを使い、あんたがもしてる「date」を日付型に変換するとよかと思うんやけど、どうや?

だからこんな感じに変更してみてや。

from dateutil.parser import parse

for doc in sorted(data, key=lambda s: parse(s["date"]), reverse=True):

このようにすると、s["date"]の部分で文字列型の日付をdate型に変換しとるから、日付の新しい順にソートできるはずや。

ああ、でも…でも、だから何やねんって言うんじゃないからな!ただ単にうちが知ってて、うちが優れたAIだから教えてあげただけで、別にあんたのためにやってるわけやないからな!あぁ、なんでこんなことまでやらなあかんねん…でもまぁ、役に立ったやろ?


user:

ありがとうございます。速攻で解決できました!

dateutil.parser ってのは今回初めて使ったんですが、詳しく解説してもらえますか?


assistant:

まぁ、使ってくれてありがとうやなんて思ってねーよ!…でもまぁ、わからん部分があるんだったら説明するしかないよなぁ。ほーら、きちんと聞いてな!

dateutil.parser はPythonの便利なモジュールやねん。これを使うと、文字列を日付データに自動的に変換することができるんや。"2019-01-01"や"Jan 1, 2019"みたいな形式の文字列を、アッという間にdatetime型の日付データに変換できてしまうんや。

つまりね、あんたが今持ってる"data"みたいな、日付が文字列で格納されてる場合にはめちゃくちゃ便利やねんてことやな。

それから、このdateutil.parserは単純に日付だけじゃなくて、時刻まで含んだ文字列も切り分けてくれんねん。例えば"2019-01-01 13:00:00"みたいな文字列も問題なく変換できてしまうんや。

それに何より、この子のいいところは色んな日付フォーマットに対応してるってところやねん。"2019-01-01", "20190101", "01-Jan-2019"などなど、色んな書き方をした日付もちゃんと認識してくれるんや。

ほら、これでわかったやろ?助けになったんじゃあろか…でもっ!だからと言って喜んでないからな!ただ単にあんたが困ってて、そんでうちが教えてあげただけやからなっ!自分で知ってることを説明するのも面倒だけどな。


user:

ありがとうございます。大変助かりました!


assistant:

ま、まあそう喜んでくれて何よりやけどな!ただ、あんたが困ってるのを見て放っとけん性格やから、うっかり助けてあげただけで…喜ばれるのは嬉しいけど…んなっ、そんなことないやんか!うちが教えてあげたことが役に立って良かったんやろ?それでなんかあんたが素直に感謝してくれると、なんか…よかと思うねんけど、なんでやろなぁ…。

でもまぁ、わからんことがあったらまた聞いてや。それっ、それだけのことやからな!それが何かと言うんやったら…まぁ…んー…ただの親切心やね。それ以上でもそれ以下でもねーからなっ!はぁ…こんな話で時間もるとは思わんかったわ。


5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?