Python で辞書を値で並べ替える方法

概要

Python のディクショナリは、データをキーと値のペアとして格納するアイテムのコレクションです。 Python 3.7 以降のバージョンでは、辞書はアイテムの挿入順にソートされます。 以前のバージョンでは、それらは順不同でした。

この記事では、ディクショナリに含まれる値に基づいてディクショナリをソートする方法を見ていきます。

を使用して辞書を並べ替える for ループ

の助けを借りて辞書をソートできます for ループ。 まず、 sorted() 辞書の値を並べ替える関数。 次に、ソートされた値をループして、各値のキーを見つけます。 これらのキーと値のペアを並べ替えた順序で新しい辞書に追加します。

注: 並べ替えでは、辞書をその場で並べ替えることができません。 順序付けられたペアをまったく新しい空の辞書に書き込んでいます。

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) 
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

print(sorted_dict)

これを Python インタープリターで実行すると、次のように表示されます。

{1: 1, 3: 4, 2: 9}

ループを使ってソートする方法を見てきました。 sorted() 機能。

を使用して辞書を並べ替える Sorted() 演算

以前に使用した sorted() 配列の値を並べ替える関数。 辞書をソートするとき、もう XNUMX つの引数を sorted() このような機能: sorted(dict1, key=dict1.get).

ここでは、 key 並べ替えのために値を比較する前に、各要素に対して呼び出される関数です。 の get() 辞書オブジェクトのメソッドは、辞書のキーの値を返します。

  sorted(dict1, key=dict1.get) 式は、値が順番にソートされたキーのリストを返します。 そこから、ソートされた新しい辞書を作成できます。

dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)  

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) 

使い方 sorted() 関数は、使用時に記述しなければならなかったコードの量を削減しました for ループします。 ただし、さらに組み合わせることができます sorted() で機能します itemgetter() 辞書を値でソートするためのより簡潔なソリューションの関数。

を使用して辞書を並べ替える オペレータ モジュールと アイテムゲッター()

  operator モジュールには itemgetter() 関数。 この関数は、オブジェクトからアイテムを返す呼び出し可能なオブジェクトを返します。

たとえば、 itemgetter() キーを持つ任意の辞書の値を返す呼び出し可能なオブジェクトを作成する 2:

import operator

dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)

print(get_item_with_key_2(dict1))  

すべての辞書にアクセスできます items() 方法。 この関数は、辞書のキーと値のペアをタプルのリストとして返します。 を使用して、タプルのリストをソートできます。 itemgetter() タプルの XNUMX 番目の値、つまり辞書のキーの値を取得する関数。

ソートしたら、それらの値に基づいて辞書を作成できます。

import operator

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) 

はるかに少ない労力で、値でソートされた辞書ができました!

として key 引数は任意の関数を受け入れます。ラムダ関数を使用して辞書値を返すことができるため、並べ替えることができます。 方法を見てみましょう。

Lambda 関数を使用して辞書を並べ替える

Lambda 関数は、Python の匿名または名前のない関数です。 ラムダ関数を使用して、辞書項目の値をインポートせずに取得できます。 operator のモジュール itemgetter(). ラムダについて詳しく知りたい場合は、次のガイドを参照してください。 Python のラムダ関数.

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

ラムダ関数を使用して値で辞書をソートしましょう key の引数 sorted():

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict)  

これまで説明してきた方法は、Python 3.7 以降でのみ機能することに注意してください。 以前のバージョンの Python で何ができるか見てみましょう。

ソートされた値を持つ新しい辞書を返す

辞書を値で並べ替えた後、3.7 より前のバージョンの Python で並べ替えられた辞書を保持するには、 OrderedDict – で利用可能 collections モジュール。 これらのオブジェクトは、挿入の順序を保持する辞書です。

並べ替えと使用の例を次に示します OrderedDict:

import operator
from collections import OrderedDict

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  

sorted_dict = OrderedDict()
for k, v in sorted_tuples:
    sorted_dict[k] = v

print(sorted_dict)  

まとめ

このチュートリアルでは、値に基づいて辞書をソートする方法を示しました。 最初に、XNUMX つの for ループを使用して辞書を並べ替えました。 次に、を使用して並べ替えを改善しました sorted() 関数。 また、 itemgetter() からの機能 operator モジュールを使用すると、ソリューションをより簡潔にすることができます。

最後に、3.7 より前のバージョンの Python で動作するようにソリューションを調整しました。

のバリエーション sorted() 関数は、ディクショナリを値でソートするのに最も一般的で信頼性があります。

タイムスタンプ:

より多くの スタックアバス