Pythonで辞書のリストをソートする方法

Pocket

Pythonで辞書のリスト(配列)をソートする方法について調べました。すぐに忘れるのでメモしておきます。

recs = [
  {"a" : 1, "b" : 5},
  {"a" : 2, "b" : 7},
  {"a" : 2, "b" : 3},
  {"a" : 3, "b" : 5}]

上のような辞書型の変数のリストがあります。

new_recs = sorted(recs, key = lambda x : (x["a"], x["b"]))
print(new_recs)
# [{'a': 1, 'b': 5}, {'a': 2, 'b': 3}, {'a': 2, 'b': 7}, {'a': 3, 'b': 5}]

sortedという関数を使うとソートができます。
引数にkeyとしてラムダ式を与えるとどの要素でソートするかを指定できます。
デフォルトでは昇順になります。
ここではa、bの順でソートしていますが、lambda x : (x["b"], x["a"]))とするとb,aの順でソートします。

new_recs = sorted(recs, key = lambda x : (x["a"], x["b"]), reverse = True)
print(new_recs)
# [{'a': 3, 'b': 5}, {'a': 2, 'b': 7}, {'a': 2, 'b': 3}, {'a': 1, 'b': 5}]

引数にreverseとしてTrueを与えると降順になります。
このときどの要素も降順になるようです。

new_recs = sorted(recs, key = lambda x : (x["a"], - x["b"]))
print(new_recs)
# [{'a': 1, 'b': 5}, {'a': 2, 'b': 7}, {'a': 2, 'b': 3}, {'a': 3, 'b': 5}]

「aは昇順、bは降順」にするときのreverseの指定方法が分かりません。
そこでラムダ式の方で調整してみました。デフォルトは昇順なのでマイナスにすれば降順になります。
上の例では「- x["b"]」とbにマイナスを付けています。これで「aは昇順、bは降順」になりました。
なおこの方法は数値の場合に限ります。

[ 2020年5月16日 | カテゴリー: デジタル | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報