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.