Pythonの辞書をソートする方法!キー・値を基準に並び替えるテクニック
生徒
「Pythonで辞書の中身を並び替える方法ってありますか?」
先生
「はい、Pythonではsorted()関数を使って、辞書のキーや値を基準にソート(並び替え)することができますよ。」
生徒
「ソートって難しそう…。どうやって使うんですか?」
先生
「とっても簡単です!まずは基本から、丁寧に解説していきますね。」
1. Pythonの辞書とは?
Python(パイソン)の辞書は、キー(名前)と値(データ)のペアを保存するデータ型です。ノートの見出しと中身のような関係です。たとえば、「りんご=150円」「みかん=100円」といった情報を1つにまとめられます。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
2. ソートとは?辞書を並び替える理由
ソート(sort)とは、データを決まった順番で並び替えることです。例えば辞書を、値段の安い順や名前のあいうえお順に並べたいときに使います。
辞書そのものは順番を持たないので、sorted()を使ってリストとして並び替えます。
3. キー(名前)でソートする方法
まずは、辞書のキー(例:「りんご」「みかん」など)で並び替える方法を見てみましょう。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
sorted_items = sorted(fruits.items())
print(sorted_items)
[('みかん', 100), ('りんご', 150), ('バナナ', 120)]
sorted()にfruits.items()を渡すと、キー(名前)で並び替えができます。結果は、リスト形式で返ってきます。
4. 値(数値)でソートする方法
次に、値(値段)を基準に並び替えてみましょう。このときはlambda(無名関数)を使って、値だけを取り出して比べます。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
sorted_items = sorted(fruits.items(), key=lambda x: x[1])
print(sorted_items)
[('みかん', 100), ('バナナ', 120), ('りんご', 150)]
x[1]とは、キーと値のうち「値」を意味します。これで値段の安い順に並びました!
5. 降順(大きい順)に並び替えるには?
デフォルトでは昇順(小さい順)に並びますが、reverse=Trueを追加すると、降順(大きい順)にできます。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
sorted_items = sorted(fruits.items(), key=lambda x: x[1], reverse=True)
print(sorted_items)
[('りんご', 150), ('バナナ', 120), ('みかん', 100)]
6. ソート結果を辞書として使いたい場合
sorted()で並び替えた結果はリストになりますが、再び辞書に戻したいときはdict()を使います。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
sorted_items = sorted(fruits.items(), key=lambda x: x[1])
sorted_dict = dict(sorted_items)
print(sorted_dict)
{'みかん': 100, 'バナナ': 120, 'りんご': 150}
dict()で元の辞書形式に戻せるので、後で使うときにも便利です。
7. 辞書のキーだけをソートして表示したいとき
キーだけを並び替えたい場合は、sorted()をfruits.keys()に使います。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
sorted_keys = sorted(fruits.keys())
print(sorted_keys)
['みかん', 'りんご', 'バナナ']
8. 値だけをソートして表示したいとき
値(値段)だけを並べ替えたいときは、fruits.values()を使います。ただし、辞書の中身は変わりません。
fruits = {"りんご": 150, "みかん": 100, "バナナ": 120}
sorted_values = sorted(fruits.values())
print(sorted_values)
[100, 120, 150]
9. ソート時によくあるエラーと注意点
辞書の値に数字以外(文字列やリストなど)が入っていると、思わぬエラーになることがあります。
例えば、辞書に文字列の値が含まれているときに、x[1]で数値として比較しようとするとエラーになります。
そのため、値の型(たとえばintやstr)を事前に確認しておくと安心です。
10. 応用例:辞書で成績をソートして表示する
応用として、名前と点数の辞書を作り、点数が高い順に並べてみましょう。
scores = {"佐藤": 80, "田中": 95, "鈴木": 70}
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
for name, score in sorted_scores:
print(f"{name}さんの点数は{score}点です。")
田中さんの点数は95点です。
佐藤さんの点数は80点です。
鈴木さんの点数は70点です。
まとめ
Pythonの辞書ソートを全体から振り返る
この記事では、Pythonの辞書をソートする方法について、基礎から応用まで順を追って学んできました。Pythonの辞書は、キーと値をセットで管理できる非常に便利なデータ構造ですが、そのままでは「並び替え」を行うことができません。そのため、実際のプログラムでは sorted() 関数を使って、一度リストとして並び替えるという考え方が重要になります。
辞書のソートは、「キーで並び替えたいのか」「値で並び替えたいのか」「昇順か降順か」といった目的をはっきりさせることがポイントです。目的に応じて items()、keys()、values() を使い分けることで、辞書の中身を思い通りの順番で扱えるようになります。これは、Python初心者が一段階レベルアップするための大切な知識です。
キーと値、それぞれのソートの考え方
キーでソートする場合は、辞書の items() をそのまま sorted() に渡すことで、自然にキー順で並び替えができます。一方、値を基準にしたソートでは、lambda を使って「どの部分を比べるか」を指定する必要があります。ここで登場した x[1] という書き方は、「キーと値のペアのうち、値だけを見る」という意味でした。
最初は少し難しく感じるかもしれませんが、「辞書をいったんキーと値のセットとして扱い、並び替えてから使う」という流れを理解できると、データ処理の幅が一気に広がります。価格順、点数順、名前順など、現実的な並び替えを簡単に表現できるようになります。
サンプルプログラムでソート処理を再確認
# 商品名と在庫数を管理する辞書
stock = {"りんご": 30, "みかん": 10, "バナナ": 20}
# 在庫数が少ない順に並び替える
sorted_stock = sorted(stock.items(), key=lambda x: x[1])
for item, count in sorted_stock:
print(item, "の在庫は", count, "個です。")
この例では、辞書の値である「在庫数」を基準にソートしています。こうした処理は、在庫管理、成績管理、売上ランキングなど、さまざまな場面で応用できます。Pythonの辞書ソートは、実務や学習の中で非常に使用頻度が高いテクニックです。
初心者が意識したい注意点
辞書の値をソートする際は、値の型が揃っているかどうかに注意が必要です。数値と文字列が混ざっている場合、比較ができずエラーになることがあります。ソート前に、辞書の中身がどのようなデータで構成されているかを確認する習慣をつけると、トラブルを防げます。
また、sorted() の結果はリストになる点も重要です。並び替えた結果を再び辞書として使いたい場合は、dict() に変換する必要があります。この一連の流れを理解しておくと、辞書操作に対する不安がなくなります。
生徒「辞書って並び替えできないと思っていましたが、sortedを使えば自由に並べられるんですね。」
先生「そうだよ。辞書はそのままでは順番を持たないけれど、考え方を変えれば問題なく扱えるんだ。」
生徒「キーで並べるか、値で並べるかを意識するのが大事なんですね。」
先生「その通り。目的を決めてソート方法を選ぶのがポイントだよ。」
生徒「成績や値段のランキング表示にも使えそうです。」
先生「うん。辞書のソートを覚えると、Pythonでできることが一気に増えるよ。」