以前 sorted()
関数について面白い使い方ができることを知って記事を書きました。
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 でソートしている訳ですね。
というかドキュメントで割としっかり解説されていますね。