オブジェクトリストを任意の順番にソート

これまで任意の順番にオブジェクトを並べ替えたい時、for ループで取り出したりして面倒なことをやっていたが、以下のように list.index() メソッドと sorted() 関数を使って簡単にできることに気付いた。何故これまで気付かなかったのだろう。

# この ID 順でソートしたい
entry_ids = '12,30,17,5,9'
# ID をリストに変換
entry_ids = list(map(lambda x: int(x), entry_ids.split(',')))

# Django のクエリで Entry オブジェクトリストを取得
entries = Entry.objects.filter(id__in=entry_ids).all()

sorted_entries = sorted(entries, key=lambda x: entry_ids.index(x.id))
Last updated on May 30, 2017