A szótár rendezése érték szerint a Pythonban

Bevezetés

A Python szótára olyan elemek gyűjteménye, amelyek kulcs-érték párokként tárolják az adatokat. A Python 3.7-es és újabb verzióiban a szótárak az elembeszúrás sorrendje szerint vannak rendezve. A korábbi verziókban rendezetlenek voltak.

Ebben a cikkben megvizsgáljuk, hogyan rendezhetjük a szótárakat a benne lévő értékek alapján.

Szótár rendezése a mert Hurok

Egy szótárat rendezhetünk a segítségével for hurok. Először is használjuk a sorted() funkciót a szótár értékeinek rendezéséhez. Ezután végigfutjuk a rendezett értékeket, és megtaláljuk az egyes értékekhez tartozó kulcsokat. Ezeket a kulcs-érték párokat rendezett sorrendben hozzáadjuk egy új szótárhoz.

Jegyzet: A rendezés nem teszi lehetővé a szótár újrarendezését a helyén. A rendezett párokat egy teljesen új, üres szótárba írjuk.

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)

Ha ezt a Python értelmezővel futtatod, a következőket fogod látni:

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

Most, hogy láttuk, hogyan kell rendezni hurkokkal, nézzünk meg egy népszerűbb alternatívát, amely a sorted() funkciót.

Szótár rendezése a rendezve() Funkció

Korábban használtuk a sorted() függvény egy tömb értékeinek rendezéséhez. A szótár rendezésekor még egy argumentumot átadhatunk a sorted() így működik: sorted(dict1, key=dict1.get).

Itt, key egy függvény, amely minden elemen meghívásra kerül, mielőtt az értékeket összehasonlítaná a rendezéshez. Az get() metódus a szótárobjektumokon a szótár kulcsának értékét adja vissza.

A sorted(dict1, key=dict1.get) kifejezés visszaadja azon kulcsok listáját, amelyek értékei sorrendben vannak rendezve. Innentől új, rendezett szótárt készíthetünk:

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) 

az sorted() funkció csökkentette a használat során írandó kód mennyiségét for hurkok. Azonban tovább kombinálhatjuk a sorted() funkciót a itemgetter() függvény a szótárak érték szerinti rendezésének tömörebb megoldásához.

Szótár rendezése a operátor Modul és itemgetter()

A operator modul tartalmazza a itemgetter() funkció. Ez a függvény egy hívható objektumot ad vissza, amely egy objektumot ad vissza.

Például használjuk itemgetter() olyan hívható objektum létrehozásához, amely bármely szótár értékét adja vissza olyan kulccsal, amely a 2:

import operator

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

print(get_item_with_key_2(dict1))  

Minden szótár hozzáfér a items() módszer. Ez a függvény a szótár kulcs-érték párjait sorok listájaként adja vissza. A sorok listáját a segítségével rendezhetjük itemgetter() függvény a sor második értékének, azaz a szótár kulcsainak értékének lehívásához.

A rendezés után létrehozhatunk egy szótárt az alábbi értékek alapján:

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) 

Sokkal kevesebb erőfeszítéssel, van egy értékek szerint rendezett szótárunk!

Mivel az key Az argumentum bármilyen függvényt elfogad, a lambda függvényeket használhatjuk a szótári értékek visszaadására, így azok rendezhetők. Lássuk hogyan.

A szótár rendezése lambda függvény segítségével

A lambda függvények névtelen vagy névtelen függvények a Pythonban. A lambda függvények segítségével megkaphatjuk egy szótári elem értékét anélkül, hogy importálni kellene a operator modul számára itemgetter(). Ha többet szeretne megtudni a lambdákról, olvassa el róluk az útmutatónkban Lambda függvények Pythonban.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

Rendezzen egy szótárt értékek szerint a lambda függvény segítségével key érve 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)  

Vegye figyelembe, hogy az eddig tárgyalt módszerek csak a Python 3.7-es és újabb verzióival működnek. Nézzük meg, mit tehetünk a Python korábbi verzióival.

Új szótár visszaadása rendezett értékekkel

A szótár értékek szerinti rendezése után a rendezett szótár megtartásához a Python 3.7 előtti verzióiban a OrderedDict – elérhető a collections modul. Ezek az objektumok szótárak, amelyek megtartják a beillesztés sorrendjét.

Íme egy példa a válogatásra és a felhasználásra 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)  

Következtetés

Ez az oktatóanyag bemutatta, hogyan lehet egy szótárt az értékei alapján rendezni. Először egy szótárt rendeztünk két for ciklus segítségével. Ezután javítottuk a válogatásunkat a sorted() funkció. Mi is láttuk a itemgetter() függvény a operator modul segítségével tömörebbé teheti megoldásunkat.

Végül a megoldásunkat a 3.7-nél régebbi Python-verziókhoz igazítottuk.

Változatai a sorted() függvény a legnépszerűbb és legmegbízhatóbb a szótár értékek szerinti rendezéséhez.

Időbélyeg:

Még több Stackabus