Python-szótárak bemutatása

Befejeződött

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 planetvá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 geta 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 Nonea 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 nameplanet 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 updateegyetlen 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 popa 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 periodhaszná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