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:降順でソートするオプション。