Python-szótárak bemutatása
A Python változói különböző adattípusokat tárolhatnak. Korábban megtanulta, hogy sztringeket és számokat tárolhat:
name = 'Earth'
moons = 1
Bár ez a módszer kisebb mennyiségű adat esetén is működik, a kapcsolódó adatok használata egyre összetettebb lehet. Képzelje el, hogy információkat szeretne tárolni a Föld holdjairól és a Jupiter holdjairól.
earth_name = 'Earth'
earth_moons = 1
jupiter_name = 'Jupiter'
jupiter_moons = 79
Figyelje meg, hogyan duplikáltuk a változókat különböző előtagokkal. Ez a duplikáció szükségtelenné válhat. Mivel gyakran tapasztalja, hogy a kapcsolódó adatkészletekkel dolgozik, például a különböző városokban a különböző hónapok átlagos csapadékmennyiségével, ezeket a változókat nem érdemes egyéni értékekként tárolni. Ehelyett Használhat Python-szótárakat.
A Python-szótárak lehetővé teszik a kapcsolódó adatkészletek használatát. A szótár kulcs-érték párok gyűjteménye. Gondoljon rá úgy, mint egy tárolón belüli változócsoportra, ahol a kulcs a változó neve, az érték pedig a benne tárolt érték.
Szótár létrehozása
A Python kapcsos zárójeleket ({ }
) és kettőspontot (:
) használ a szótárak jelöléséhez. Létrehozhat egy üres szótárat, és később hozzáadhat értékeket, vagy feltöltheti azt a létrehozáskor. Minden kulcs/érték kettősponttal van elválasztva, és az egyes kulcsok neve sztringkonstansként szerepel az idézőjelekben. Mivel a kulcs egy sztringkonstans, bármilyen nevet használhat az érték leírásához.
Hozzunk létre egy szótárt a Föld bolygó nevének tárolásához, és a Föld holdjainak száma:
planet = {
'name': 'Earth',
'moons': 1
}
Két kulcsod van, 'name'
és 'moons'
. Minden kulcs ugyanúgy viselkedik, mint egy változó: egyedi névvel rendelkeznek, és egy értéket tárolnak. Ezek azonban egyetlen, nagyobb, elnevezett planet
változóban találhatók.
A normál változókhoz hasonlóan gondoskodnia kell arról, hogy a megfelelő adattípusokat használja. moons
Az előző példában szereplő értékben 1
nem tartalmazott idézőjeleket a szám körül, mert egész számot szeretne használni. Ha használta '1'
volna, a Python sztringként látja ezt a változót, ami hatással lenne a számítások elvégzésére.
A normál változókkal ellentétben a kulcsneveknek nem kell a Python általános elnevezési szabályait követnie. A kulcsnevekkel leíróbbak lehetnek a kódban.
Szótárértékek olvasása
A szótárban értékek olvashatók. A szótárobjektumok olyan metódussal get
rendelkeznek, amellyel a kulcs használatával hozzáférhet egy értékhez. Ha ki szeretné nyomtatni a dokumentumot name
, a következő kódot használhatja:
print(planet.get('name'))
Earth
Mint gyaníthatja, a szótárban lévő értékek elérése gyakori művelet. Szerencsére van egy parancsikon. A kulcsot szögletes zárójelbe ([ ]
) is átadhatja. Ez a metódus kevesebb kódot használ, mint get
a legtöbb programozó ezt a szintaxist használja. Az előző példát a következő kóddal írhatja át:
# planet['name'] is identical to using planet.get('name')
print(planet['name'])
Earth
Bár a szögletes zárójelek ([ ]
) viselkedése get
általában megegyezik az elemek beolvasásakor, van egy lényeges különbség. Ha egy kulcs nem érhető el, get
visszaadja None
a függvényt, és [ ]
előhoz egy KeyError
.
wibble = planet.get('wibble') # Returns None
wibble = planet['wibble'] # Throws KeyError
Szótárértékek módosítása
A szótárobjektumban lévő értékeket a metódussal update
is módosíthatja. Ez a metódus egy szótárat fogad el paraméterként, és frissíti a meglévő értékeket az Ön által megadott újakkal. Ha módosítani szeretné a name
planet
szótárt, használhatja a következő kódot, például:
planet.update({'name': 'Makemake'})
# No output: name is now set to Makemake.
Az értékek olvasásához használt szögletes zárójelek ([ ]
) parancsikonhoz hasonlóan ugyanezzel a billentyűparanccsal módosíthatja az értékeket. A szintaxisban az a fő különbség, hogy új értéket (más néven hozzárendelési operátort) használ =
. Az előző példa nevének módosításához használja a következő kódot:
planet['name'] = 'Makemake'
# No output: name is now set to Makemake.
A használat update
fő előnye, hogy több értéket is módosíthat egy műveletben. A következő két példa logikailag megegyezik, de a szintaxis eltérő. Szabadon használhatja azt a szintaxist, amelyet a legmegfelelőbbnek érez. A fejlesztők többsége szögletes zárójeleket választ az egyes értékek frissítéséhez.
Az alábbi példa ugyanazokat a módosításokat hajtja végre a változón planet
, frissítve a nevet és a holdakat. Figyelje meg, hogy a használatával update
egyetlen hívást indít a függvényre, míg a szögletes zárójelek használata két hívást foglal magában.
Frissítés használata:
planet.update({
'name': 'Jupiter',
'moons': 79
})
Szögletes zárójelek használata:
planet['name'] = 'Jupiter'
planet['moons'] = 79
Kulcsok hozzáadása és eltávolítása
A szótár inicializálásakor nem kell minden kulcsot létrehoznia. Valójában nem kell létrehoznia! Amikor új kulcsot szeretne létrehozni, ugyanúgy rendelje hozzá, mint egy meglévőt.
Tegyük fel, hogy napokba szeretné belefoglalni planet
az orbitális időszakot:
planet['orbital period'] = 4333
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# orbital period: 4333
# }
Fontos
A kulcsnevek, mint minden más Pythonban, megkülönböztetik a kis- és nagybetűket. Ennek eredményeképpen két 'name'
'Name'
különálló kulcs látható egy Python-szótárban.
Kulcs eltávolításához használja pop
a következőt: . pop
visszaadja az értéket, és eltávolítja a kulcsot a szótárból. Az eltávolításhoz orbital period
használja a következő kódot:
planet.pop('orbital period')
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# }
Összetett adattípusok
A szótárak bármilyen típusú értéket tárolhatnak, beleértve más szótárakat is. Ez lehetővé teszi az összetett adatok igény szerinti modellezését. Képzelje el, hogy el kell tárolnia az átmérőjét planet
, amely az egyenlítő vagy a pólusok körül mérhető. Az információk tárolásához létrehozhat egy másik szótárat is planet
:
# Add address
planet['diameter (km)'] = {
'polar': 133709,
'equatorial': 142984
}
# planet dictionary now contains: {
# name: 'Jupiter'
# moons: 79
# diameter (km): {
# polar: 133709
# equatorial: 142984
# }
# }
Ha beágyazott szótárban szeretné lekérni az értékeket, szögletes zárójeleket vagy hívásokat kell összefűznie get
.
print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')
Jupiter polar diameter: 133709