【Python】辞書をキーの値でソートする方法

Pythonの辞書(dictionary)は、キーと値のペアを保持する便利なデータ構造です。

しかし、辞書は順序を持たないため、データを特定の順序で表示したい場合にはソートが必要です。

このガイドでは、Pythonで辞書をキーや値でソートする方法について、初心者向けにわかりやすく解説します。

目次から探す

辞書のソートの基本

Pythonの辞書(dictionary)は、キーと値のペアを保持するデータ構造です。

辞書は順序を持たないため、データの順序を保証する必要がある場合にはソートが必要です。

ここでは、辞書をソートする基本的な考え方について説明します。

ソートの必要性

辞書をソートする必要があるシチュエーションは多岐にわたります。

例えば、以下のような場合です。

  • データの可読性向上: ソートされたデータは、視覚的に理解しやすくなります。

特に大規模なデータセットでは、ソートされたデータの方が見やすくなります。

  • 検索効率の向上: ソートされたデータは、特定のキーや値を検索する際に効率が良くなります。
  • データの整列: 特定の順序でデータを処理する必要がある場合、ソートは不可欠です。

例えば、成績表を点数順に並べる場合などです。

ソートの方法の概要

Pythonで辞書をソートする方法はいくつかあります。

主に以下の方法が一般的です。

  1. sorted()関数を使用: Pythonの組み込み関数であるsorted()を使用して、辞書をソートすることができます。

この関数は、キーや値に基づいて辞書をソートするための柔軟なオプションを提供します。

  1. operatorモジュールを使用: operatorモジュールのitemgetterを使用して、辞書のキーや値を基にソートすることができます。

この方法は、特に複雑なソート条件が必要な場合に便利です。

これらの方法を使うことで、辞書をキーや値に基づいて昇順または降順にソートすることができます。

次のセクションでは、具体的なソート方法について詳しく説明します。

sorted()関数を使った辞書のソート

Pythonのsorted()関数は、リストやタプルなどのイテラブルなオブジェクトをソートするために使用されます。

辞書もイテラブルなオブジェクトであるため、sorted()関数を使ってソートすることが可能です。

ここでは、辞書をキーや値でソートする方法について詳しく解説します。

sorted()関数の基本

sorted()関数は、指定されたイテラブルをソートして新しいリストを返します。

基本的な使い方は以下の通りです。

sorted(iterable, key=None, reverse=False)
  • iterable: ソート対象のイテラブルオブジェクト。
  • key: ソートの基準となる関数。

デフォルトはNone

  • reverse: ソート順を逆にするかどうか。

デフォルトはFalse

辞書のキーでソートする方法

辞書をキーでソートする場合、sorted()関数key引数に辞書のkeys()メソッドを指定します。

昇順でソート

以下の例では、辞書をキーの昇順でソートします。

# サンプル辞書
sample_dict = {'b': 2, 'a': 1, 'c': 3}
# キーで昇順にソート
sorted_keys = sorted(sample_dict.keys())
# ソートされた辞書を作成
sorted_dict = {key: sample_dict[key] for key in sorted_keys}
print(sorted_dict)
{'a': 1, 'b': 2, 'c': 3}

降順でソート

キーで降順にソートする場合は、reverse=Trueを指定します。

# サンプル辞書
sample_dict = {'b': 2, 'a': 1, 'c': 3}
# キーで降順にソート
sorted_keys = sorted(sample_dict.keys(), reverse=True)
# ソートされた辞書を作成
sorted_dict = {key: sample_dict[key] for key in sorted_keys}
print(sorted_dict)
{'c': 3, 'b': 2, 'a': 1}

辞書の値でソートする方法

辞書を値でソートする場合、sorted()関数key引数にlambda関数を使用して値を基準にソートします。

昇順でソート

以下の例では、辞書を値の昇順でソートします。

# サンプル辞書
sample_dict = {'b': 2, 'a': 1, 'c': 3}
# 値で昇順にソート
sorted_items = sorted(sample_dict.items(), key=lambda item: item[1])
# ソートされた辞書を作成
sorted_dict = {key: value for key, value in sorted_items}
print(sorted_dict)
{'a': 1, 'b': 2, 'c': 3}

降順でソート

値で降順にソートする場合は、reverse=Trueを指定します。

# サンプル辞書
sample_dict = {'b': 2, 'a': 1, 'c': 3}
# 値で降順にソート
sorted_items = sorted(sample_dict.items(), key=lambda item: item[1], reverse=True)
# ソートされた辞書を作成
sorted_dict = {key: value for key, value in sorted_items}
print(sorted_dict)
{'c': 3, 'b': 2, 'a': 1}

以上が、sorted()関数を使って辞書をキーや値でソートする方法です。

次に、operatorモジュールを使った辞書のソート方法について解説します。

operatorモジュールを使った辞書のソート

Pythonの標準ライブラリには、辞書のソートをより簡単に行うための便利なモジュールが含まれています。

その一つがoperatorモジュールです。

このモジュールを使うことで、辞書のキーや値に基づいて簡単にソートを行うことができます。

operator.itemgetterの基本

operatorモジュールの中でも特に便利なのがoperator.itemgetterです。

itemgetterは、指定したキーに基づいて辞書の要素を取得するための関数を生成します。

これを使うことで、辞書のソートが非常に簡単になります。

以下は、itemgetterの基本的な使い方の例です。

import operator
# サンプル辞書
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# itemgetterを使ってキーを取得
get_key = operator.itemgetter('apple')
print(get_key(sample_dict))  # 出力: 3

itemgetterを使ったキーでのソート

itemgetterを使って辞書をキーでソートする方法を見てみましょう。

以下の例では、辞書をキーの昇順および降順でソートします。

昇順でソート

import operator
# サンプル辞書
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# itemgetterを使ってキーでソート
sorted_dict = dict(sorted(sample_dict.items(), key=operator.itemgetter(0)))
print(sorted_dict)  # 出力: {'apple': 3, 'banana': 1, 'cherry': 2}

降順でソート

import operator
# サンプル辞書
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# itemgetterを使ってキーで降順ソート
sorted_dict = dict(sorted(sample_dict.items(), key=operator.itemgetter(0), reverse=True))
print(sorted_dict)  # 出力: {'cherry': 2, 'banana': 1, 'apple': 3}

itemgetterを使った値でのソート

次に、itemgetterを使って辞書を値でソートする方法を見てみましょう。

以下の例では、辞書を値の昇順および降順でソートします。

昇順でソート

import operator
# サンプル辞書
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# itemgetterを使って値でソート
sorted_dict = dict(sorted(sample_dict.items(), key=operator.itemgetter(1)))
print(sorted_dict)  # 出力: {'banana': 1, 'cherry': 2, 'apple': 3}

降順でソート

import operator
# サンプル辞書
sample_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# itemgetterを使って値で降順ソート
sorted_dict = dict(sorted(sample_dict.items(), key=operator.itemgetter(1), reverse=True))
print(sorted_dict)  # 出力: {'apple': 3, 'cherry': 2, 'banana': 1}

operator.itemgetterを使うことで、辞書のキーや値に基づいて簡単にソートを行うことができます。

これにより、コードの可読性が向上し、より効率的にデータを操作することが可能になります。

辞書のソート結果の保持

辞書をソートした結果をどのように保持するかは、用途によって異なります。

ここでは、ソート結果を新しい辞書として保持する方法と、リストとして保持する方法について解説します。

ソート結果を新しい辞書として保持

辞書をソートした結果を新しい辞書として保持する場合、dictコンストラクタを使用してソートされたタプルのリストを辞書に変換します。

以下に具体的な例を示します。

# 元の辞書
original_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# 辞書をキーでソートして新しい辞書を作成
sorted_dict_by_key = dict(sorted(original_dict.items()))
print("キーでソートされた辞書:", sorted_dict_by_key)
# 辞書を値でソートして新しい辞書を作成
sorted_dict_by_value = dict(sorted(original_dict.items(), key=lambda item: item[1]))
print("値でソートされた辞書:", sorted_dict_by_value)

上記のコードでは、sorted()関数を使用して辞書のアイテムをソートし、その結果をdictコンストラクタに渡して新しい辞書を作成しています。

実行結果

キーでソートされた辞書: {'apple': 3, 'banana': 1, 'cherry': 2}
値でソートされた辞書: {'banana': 1, 'cherry': 2, 'apple': 3}

ソート結果をリストとして保持

辞書をソートした結果をリストとして保持する場合、sorted()関数の結果をそのままリストとして扱います。

以下に具体的な例を示します。

# 元の辞書
original_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
# 辞書をキーでソートしてリストを作成
sorted_list_by_key = sorted(original_dict.items())
print("キーでソートされたリスト:", sorted_list_by_key)
# 辞書を値でソートしてリストを作成
sorted_list_by_value = sorted(original_dict.items(), key=lambda item: item[1])
print("値でソートされたリスト:", sorted_list_by_value)

上記のコードでは、sorted()関数を使用して辞書のアイテムをソートし、その結果をリストとして保持しています。

実行結果

キーでソートされたリスト: [('apple', 3), ('banana', 1), ('cherry', 2)]
値でソートされたリスト: [('banana', 1), ('cherry', 2), ('apple', 3)]

このように、辞書のソート結果を新しい辞書として保持する方法とリストとして保持する方法の両方を理解しておくと、用途に応じて適切なデータ構造を選択することができます。

目次から探す