魂の生命の領域

AWS とか Python とか本読んだ感想とか哲学とか書きます

こいついつも Python の話してるな pt.3

以前 sorted() 関数について面白い使い方ができることを知って記事を書きました。

kesumita.hatenablog.com

sorted() 関数は list 型でよく使うイメージでしたが試しに他の型に対して使ってみました。

>>> t = 3, 2
>>> sorted(t)
[2, 3]

タプルでも使えますね。 イミュータブルというイメージが強すぎて最初はびっくりしました。 とはいえ戻り値はリスト型で、元の変数自体は書き換えません。

そして sort() メソッドはリスト型にしか使えません。

辞書型でも使えますね。

>>> d = {'k2': 'v2', 'k1': 'v1'}
>>> sorted(d)
['k1', 'k2']

キーについてソートしてくれるみたいです。

>>> a = [{'k0': 'v0'}, {'k0': 'v1-0', 'k1-1': 'v1-1'}, {'k0': 'v2-0'}]
>>> sorted(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'dict' and 'dict'

さすがにこれは無理か。

>>> a = [{'k0': 'v0'}, {'k0': 'v1-0', 'k1-1': 'v1-1'}, {'k0': 'v2-0'}]
>>> sorted(a, key= lambda x: x['k0'])
[{'k0': 'v0'}, {'k0': 'v1-0', 'k1-1': 'v1-1'}, {'k0': 'v2-0'}]

共通のキーを持っていると、第二引数の key に比較のルールを明示することで可能になります。 ここでは v0 と v1-0 と v2-0 でソートしている訳ですね。

というかドキュメントで割としっかり解説されていますね。

docs.python.org