【Python】辞書を複数の条件でソートする方法

この記事では、Pythonで辞書を複数の条件でソートする方法について解説します。

複数のキーを指定してソートしたり、複数の値を指定してソートしたり、さらにはカスタム関数を使用してソートする方法について学ぶことができます。

これにより、柔軟なソートが可能となります。

目次から探す

複数の条件でソートする方法

データをソートする際、単一のキーだけでなく、複数の条件を指定してソートすることがあります。

Pythonでは、辞書を複数の条件でソートする方法がいくつかあります。

以下では、複数のキーを指定してソートする方法、複数の値を指定してソートする方法、そして複数のカスタム関数を使用してソートする方法について解説します。

複数のキーを指定してソートする

複数のキーを指定してソートする場合、sorted()関数やsort()メソッドのkey引数に複数のキーを指定することができます。

キーの指定はタプルで行い、最初のキーから順に優先度が高い順にソートされます。

data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 20},
    {'name': 'Alice', 'age': 30}
]

sorted_data = sorted(data, key=lambda x: (x['name'], x['age']))
print(sorted_data)

上記のコードでは、nameキーを優先してソートし、同じnameの場合にはageキーでソートしています。

結果は以下の通りです。

[{'name': 'Alice', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 30}, {'name': 'Charlie', 'age': 20}]

複数の値を指定してソートする

辞書の値を基準にソートする場合も同様に、key引数に複数の値を指定することができます。

値の指定はタプルで行い、最初の値から順に優先度が高い順にソートされます。

data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 20},
    {'name': 'Alice', 'age': 30}
]

sorted_data = sorted(data, key=lambda x: (x['age'], x['name']))
print(sorted_data)

上記のコードでは、ageキーを優先してソートし、同じageの場合にはnameキーでソートしています。

結果は以下の通りです。

[{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}, {'name': 'Alice', 'age': 30}]

複数のカスタム関数を使用してソートする

さらに複雑な条件でソートする場合、カスタム関数を使用することができます。

key引数にカスタム関数を指定することで、ソートの基準を自由に設定することができます。

data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 20},
    {'name': 'Alice', 'age': 30}
]

def custom_sort(item):
    return item['age'] * len(item['name'])

sorted_data = sorted(data, key=custom_sort)
print(sorted_data)

上記のコードでは、ageキーの値にnameキーの文字数を掛けた結果を基準にソートしています。

結果は以下の通りです。

[{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 30}]

これらの方法を組み合わせることで、さまざまな条件で辞書をソートすることができます。

必要に応じて、複数のキー、値、カスタム関数を組み合わせて使い、柔軟なソートを実現しましょう。

sorted()関数は新しいリストを返し、元のリストは変更しません。

sort()メソッドは元のリストを直接変更するので、扱いには注意しましょう。

目次から探す