Pythonでは、リスト内の辞書を特定のキーに基づいてソートすることがよくあります。しかし、やり方を忘れがちなことも多いので、この記事でその方法を備忘録としてまとめます。
目次
sorted()
関数とlambda
関数を使った基本的なソート
Pythonのsorted()
関数は、リストを指定されたキーに基づいてソートするのに便利です。リスト内に辞書が含まれている場合、lambda
関数を使って辞書のキーを指定し、その値に基づいてソートすることができます。
例えば、buy_orders
というリストがあり、それぞれの辞書にはprice
というキーがあるとします。このリストをprice
に基づいて昇順にソートするコードは以下の通りです。
buy_orders = [
{"id": 1, "price": "100.5", "quantity": 10},
{"id": 2, "price": "99.9", "quantity": 5},
{"id": 3, "price": "101.2", "quantity": 7},
]
# priceを数値として昇順にソート
sorted_buy_orders = sorted(buy_orders, key=lambda x: float(x['price']))
# 結果を表示
for order in sorted_buy_orders:
print(order)
結果:
{'id': 2, 'price': '99.9', 'quantity': 5}
{'id': 1, 'price': '100.5', 'quantity': 10}
{'id': 3, 'price': '101.2', 'quantity': 7}
このコードでは、sorted()
関数にkey
としてlambda x: float(x['price'])
を指定しています。これにより、price
をfloat
型に変換してからソートを行います。
reverse=True
を使った降順ソート
昇順だけでなく、降順でソートしたい場合もあります。その場合、sorted()
関数のreverse
オプションをTrue
に設定します。
sorted_buy_orders_desc = sorted(buy_orders, key=lambda x: float(x['price']), reverse=True)
for order in sorted_buy_orders_desc:
print(order)
結果:
{'id': 3, 'price': '101.2', 'quantity': 7}
{'id': 1, 'price': '100.5', 'quantity': 10}
{'id': 2, 'price': '99.9', 'quantity': 5}
応用: 複数のキーでソートする
複数のキーに基づいてソートすることもできます。例えば、price
が同じ場合にquantity
でソートしたい場合は、lambda
関数を拡張します。
sorted_buy_orders_multi = sorted(buy_orders, key=lambda x: (float(x['price']), x['quantity']))
for order in sorted_buy_orders_multi:
print(order)
このコードでは、price
でソートし、price
が同じ場合はquantity
に基づいてソートされます。
まとめ
リスト内の辞書をソートする方法は、sorted()
とlambda
を使うのが基本です。これで、特定のキーに基づいて辞書を昇順や降順でソートできます。複数のキーでソートすることも簡単です。
コードのポイント:
sorted()
関数:リストをソートする標準的な方法。key
引数:lambda
関数を使って、ソートの基準となる辞書のキーを指定。reverse=True
:降順でソートするオプション。