Hogyan lehet egy szótárat kulcs és érték szerint rendezni Pythonban?

Apr 2, 2020 – 4 min read

Hello, Everyone. Ma rövid tippeket adok a szótárválogatásról Pythonban (Python3). Mint tudjuk, a szótárak eleve rendezetlenek, de más típusok, mint például a lista és a tuple nem. Szótárat nem lehet rendezni, de egy szótárnak készíthetünk olyan reprezentációt, ami rendezett. Szükséged van tehát egy rendezett adattípusra a rendezett kulcsok vagy értékek ábrázolásához, ami egy lista lesz – valószínűleg egy tuple-ok listája.

Szótár Pythonban (forrás)

A szótárak rendezésének folyamata

Amint az első ábrán láthatjuk, a szótárak pythonban a kulcsok halmaza.értékpárokból áll, ahol minden egyes kulcs-érték párt elemnek nevezünk. Most koncentráljunk a fő kérdésre: A szótárakat lehet kulcsok vagy értékek szerint rendezni. Ahogy a második ábrán kirajzolódik, egy szótár keys(), values() és items() értékeit rendezhetjük. Koncentráljunk először a values() szerinti rendezésre.

szótár rendezése értékek szerint

Legyen egy szótárunk, amely több neves szervezetet tartalmaz, mint keys() és az alapításuk évét, mint values(). Tehát egy olyan rendezett szótárat szeretnénk, ahol a legrégebbi szervezet elemei lesznek az első elemek, a legfiatalabb szervezet pedig az utolsó.

d = {"Apple": 1976, "Microsoft":1975, "Facebook":2004, "Sony":1946, "IBM":1911, "Amazon": 1994 }

Amint a d szótárban láthatjuk, az IBM a legrégebbi szervezet, ezért ez lesz a rendezett szótár első kulcsa, a Facebook pedig az utolsó.

print(sorted(d.items(), key = lambda kv:kv))
print(sorted(d.items(), key = lambda kv:kv, reverse = True))
print(dict(sorted(d.items(), key = lambda kv:kv)))
sort_d = dict(sorted(d.items(), key = lambda kv:kv))
print(sort_d)

Kimenet:



{'IBM': 1911, 'Sony': 1946, 'Microsoft': 1975, 'Apple': 1976, 'Amazon': 1994, 'Facebook': 2004}
{'IBM': 1911, 'Sony': 1946, 'Microsoft': 1975, 'Apple': 1976, 'Amazon': 1994, 'Facebook': 2004}

Mivel rendezni fogjuk d.items(), ami egy tuple listája, ahol keys()az első paraméter és values() a második paramétere minden egyes tuple-nek. A tuplik listájának rendezéséhez az értékeket, azaz az egyes tuplik második paraméterét választottuk kulcsként. Az első sorban a kulcsot egy lambdafüggvényként definiáljuk, ahol a kulcs értéke a tételek második paramétere. Ez a rendezés a rendezett tupelek listáját fogja létrehozni. egyszerűen szótárrá alakíthatjuk a dict() függvény használatával, ahogy a harmadik kódsorban látható. Megfordíthatjuk a rendezést is, amelynek eredményeképpen egy olyan tuple-listát hozunk létre, amelyben a legfrissebb az első, a legrégebbi pedig az utolsó elem lesz, ahogyan azt a kód második sora mutatja. A rendezett szótárat más névre is elmenthetjük a fentiek szerint.

sorting dictionary by key

print(sorted(d.items()))
print(dict(sorted(d.items())))
print(dict(sorted(d.items(), key = lambda kv:kv)))
print(sorted(d.items(), reverse = True))

Output:


{'Amazon': 1994, 'Apple': 1976, 'Facebook': 2004, 'IBM': 1911, 'Microsoft': 1975, 'Sony': 1946}
{'Amazon': 1994, 'Apple': 1976, 'Facebook': 2004, 'IBM': 1911, 'Microsoft': 1975, 'Sony': 1946}

Amint tudjuk, hogy a keys() itt a d szótárban d stringek, akkor a kulcs szerinti rendezés létrehoz egy listát az egyes elemek keys() betűrendjében lévő tuplikról, és a dict() függvény segítségével kialakul a szótár. használhatjuk a lambda függvényt is a kulcs definiálására, ami szinte felesleges, csak azért mutattam meg, hogy a rendezésnél a kulcs definiálásánál összehasonlítást végezzünk.

Ez az. Kérjük, látogasson el a profilomra, hogy több történetet kapjon a gépi tanulásról és az adatelemzésről. Bármilyen javaslatot és kritikát nagyra értékelünk. Itt vannak a korábbi történeteim, amelyek az Inha University, Rep of Korea által kínált Graduate kurzuson alapulnak:

Régebbi történetek:

Part-1: Basic python és telepítés
Part-2: Chapter-2: Python Data Structure – Data Type
Part-3: Control Statements (Loops) in Python
Part:4: Python függvények & Modulok
Part:5: Objektumorientált programozás Pythonban – Schafer & DataCamp.
Part-6: A gépi tanulás típusai & eljárása
Part-7: Feature engineering for machine learning

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.