12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リストの中のdatetime型を基準にソートする方法

Last updated at Posted at 2018-01-29

リストの中のdatetime型を基準に並び替え(ソート)をする方法

WEBスクレイピングで得たデータは最新の情報が上の方にあり、古いデータが下にある、
もしくは古い情報になればなるほど、次のページや深いページにあるということが一般的です。
そんなデータを取得するとこんな感じになります。

from datetime import datetime as dt
from pprint import pprint

sale = []
sale.append(['モンスターエナジー', '210',  '1', dt(2018, 1, 20)])
sale.append(['リンゴジュース', '120',  '1', dt(2018, 1, 18)])
sale.append(['レッドブル', '250',  '1', dt(2018, 1, 6)])
sale.append(['ジョージアエメラルドマウンテン', '100',  '1', dt(2018, 1, 5)])

pprint(sale)

# [['モンスターエナジー', '210', '1', datetime.datetime(2018, 1, 20, 0, 0)],
#  ['リンゴジュース', '120', '1', datetime.datetime(2018, 1, 18, 0, 0)],
#  ['レッドブル', '250', '1', datetime.datetime(2018, 1, 6, 0, 0)],
#  ['ジョージアエメラルドマウンテン', '100', '1', datetime.datetime(2018, 1, 5, 0, 0)]]

定期的にデータを取得して、データベースに保存する場合は、
古いデータから登録していきたいところなんですが、
WEBスクレイピングしてきたままのデータだと新しいデータから古いデータへと登録がされていってしまいますね。

ですので、このリストを並び替えてから、データベースに登録していけば
古いデータから順に登録していくことができます。
並び替えるのは sorted() を利用します。
デフォルトでは昇順に並び替えされます。
降順に並び替えたい場合は引数に reverse=True を追加します。
datetime型でも簡単に並び替えできます。

from datetime import datetime as dt
from pprint import pprint

sale = []
sale.append(['モンスターエナジー', '210',  '1', dt(2018, 1, 20)])
sale.append(['リンゴジュース', '120',  '1', dt(2018, 1, 18)])
sale.append(['レッドブル', '250',  '1', dt(2018, 1, 6)])
sale.append(['ジョージアエメラルドマウンテン', '100',  '1', dt(2018, 1, 5)])

# sample
pprint(sale)

# result1 日付の古い順で並び替え(datetime型)
sorted_sale = sorted(sale, key=lambda s: s[3])
pprint(sorted_sale)

# result2 値段が高い順(降順)に並び替え
sorted_sale = sorted(sale, key=lambda s: int(s[1]), reverse=True)
pprint(sorted_sale)

# sample
# [['モンスターエナジー', '210', '1', datetime.datetime(2018, 1, 20, 0, 0)],
#  ['リンゴジュース', '120', '1', datetime.datetime(2018, 1, 18, 0, 0)],
#  ['レッドブル', '250', '1', datetime.datetime(2018, 1, 6, 0, 0)],
#  ['ジョージアエメラルドマウンテン', '100', '1', datetime.datetime(2018, 1, 5, 0, 0)]]

# result1
# [['ジョージアエメラルドマウンテン', '100', '1', datetime.datetime(2018, 1, 5, 0, 0)],
#  ['レッドブル', '250', '1', datetime.datetime(2018, 1, 6, 0, 0)],
#  ['リンゴジュース', '120', '1', datetime.datetime(2018, 1, 18, 0, 0)],
#  ['モンスターエナジー', '210', '1', datetime.datetime(2018, 1, 20, 0, 0)]]

# result2
# [['レッドブル', '250', '1', datetime.datetime(2018, 1, 6, 0, 0)],
#  ['モンスターエナジー', '210', '1', datetime.datetime(2018, 1, 20, 0, 0)],
#  ['リンゴジュース', '120', '1', datetime.datetime(2018, 1, 18, 0, 0)],
#  ['ジョージアエメラルドマウンテン', '100', '1', datetime.datetime(2018, 1, 5, 0, 0)]]
12
8
2

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
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?