Python'da Bir Sözlük Değere Göre Nasıl Sıralanır?

Giriş

Python'da bir sözlük, verileri anahtar/değer çiftleri olarak depolayan bir öğeler topluluğudur. Python 3.7 ve sonraki sürümlerinde sözlükler, öğe ekleme sırasına göre sıralanır. Daha önceki sürümlerde, sırasızlardı.

Bu yazıda, bir sözlüğü içerdiği değerlere göre nasıl sıralayabileceğimize bir göz atacağız.

Kullanarak Sözlüğü Sırala için döngü

yardımıyla bir sözlüğü sıralayabiliriz. for döngü. İlk olarak, sorted() sözlüğün değerlerini sıralama işlevi. Daha sonra sıralanan değerler arasında dolaşarak her bir değerin anahtarlarını buluruz. Bu anahtar/değer çiftlerini sıralı olarak yeni bir sözlüğe ekliyoruz.

Not: Sıralama, sözlüğü yerinde yeniden sıralamanıza izin vermez. Sıralı çiftleri tamamen yeni, boş bir sözlükte yazıyoruz.

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)

Bunu Python yorumlayıcısıyla çalıştırırsanız şunu görürsünüz:

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

Döngülerle nasıl sıralanacağını gördüğümüze göre, şimdi aşağıdakileri kullanan daha popüler bir alternatife bakalım. sorted() fonksiyonu.

Kullanarak Sözlüğü Sırala sıralanmış () işlev

Daha önce kullandığımız sorted() Bir dizinin değerlerini sıralama işlevi. Bir sözlüğü sıralarken, sözlüğe bir argüman daha iletebiliriz. sorted() şu şekilde çalışın: sorted(dict1, key=dict1.get).

Burada, key değerler sıralama için karşılaştırılmadan önce her öğede çağrılan bir işlevdir. bu get() sözlük nesnelerindeki yöntem, bir sözlüğün anahtarının değerini döndürür.

The sorted(dict1, key=dict1.get) ifadesi, değerleri sırayla sıralanan anahtarların listesini döndürür. Buradan yeni, sıralanmış bir sözlük oluşturabiliriz:

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) 

Kullanma sorted() işlevi kullanırken yazmamız gereken kod miktarını azalttı for döngüler. Ancak, daha da birleştirebiliriz sorted() ile işlev itemgetter() sözlükleri değerlere göre sıralamak için daha özlü bir çözüm işlevi görür.

Kullanarak Sözlüğü Sırala Şebeke Modül ve öğe alıcı()

The operator modül şunları içerir: itemgetter() işlev. Bu işlev, bir nesneden bir öğe döndüren çağrılabilir bir nesne döndürür.

Örneğin, kullanalım itemgetter() bir anahtarla herhangi bir sözlüğün değerini döndüren çağrılabilir bir nesne oluşturmak için 2:

import operator

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

print(get_item_with_key_2(dict1))  

Her sözlüğün erişim hakkı vardır. items() yöntem. Bu işlev, bir sözlüğün anahtar-değer çiftlerini bir demet listesi olarak döndürür. kullanarak tuple listesini sıralayabiliriz. itemgetter() Tuple'ın ikinci değerini, yani sözlükteki tuşların değerini çekme işlevi.

Sıralandığında, bu değerlere dayalı bir sözlük oluşturabiliriz:

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) 

Çok daha az çabayla, değerlere göre sıralanmış bir sözlüğümüz var!

olarak key argüman herhangi bir işlevi kabul ederse, sıralanabilmeleri için sözlük değerlerini döndürmek için lambda işlevlerini kullanabiliriz. Nasıl olduğunu görelim.

Lambda İşlevi Kullanarak Sözlüğü Sıralama

Lambda işlevleri, Python'da anonim veya adsız işlevlerdir. Bir sözlük öğesinin değerini almak zorunda kalmadan lambda işlevlerini kullanabiliriz. operator modül için itemgetter(). Lambdalar hakkında daha fazla bilgi edinmek isterseniz, onlar hakkında kılavuzumuzda okuyabilirsiniz. Python'da Lambda Fonksiyonları.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Sözlükte bir lambda işlevi kullanarak bir sözlüğü değerlere göre sıralayalım. key argüman 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)  

Şu ana kadar tartıştığımız yöntemlerin yalnızca Python 3.7 ve sonraki sürümleriyle çalıştığını unutmayın. Python'un önceki sürümleri için neler yapabileceğimizi görelim.

Sıralanmış Değerlerle Yeni Bir Sözlük Döndürme

Bir sözlüğü değerlere göre sıraladıktan sonra, 3.7'den önceki Python sürümlerinde sıralanmış bir sözlük tutmak için OrderedDict – içinde mevcut collections modül. Bu nesneler, ekleme sırasını koruyan sözlüklerdir.

İşte sıralama ve kullanma örneği 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)  

Sonuç

Bu öğretici, bir sözlüğün değerlerine göre nasıl sıralanabileceğini gösterdi. Önce iki for döngüsü kullanarak bir sözlüğü sıraladık. Daha sonra kullanarak sıralamamızı geliştirdik. sorted() işlev. Biz de gördük itemgetter() işlevi operator modülü çözümümüzü daha özlü hale getirebilir.

Son olarak, çözümümüzü 3.7'den daha düşük Python sürümlerinde çalışacak şekilde uyarladık.

Varyasyonları sorted() işlevi, bir sözlüğü değerlere göre sıralamak için en popüler ve güvenilir olanlardır.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı