MENU

Pythonでリスト内の辞書を特定のキーに基づいてソートする方法

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'])を指定しています。これにより、pricefloat型に変換してからソートを行います。

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