Wprowadzenie do słowników języka Python
Zmienne w języku Python mogą przechowywać różne typy danych. Wcześniej wiesz już, jak przechowywać ciągi i liczby:
name = 'Earth'
moons = 1
Mimo że ta metoda działa w przypadku mniejszych ilości danych, może stać się coraz bardziej złożona podczas pracy z powiązanymi danymi. Wyobraź sobie, że chcesz przechowywać informacje o księżycach Ziemi i księżycach Jowisza.
earth_name = 'Earth'
earth_moons = 1
jupiter_name = 'Jupiter'
jupiter_moons = 79
Zwróć uwagę, jak zduplikowaliśmy zmienne z różnymi prefiksami. Takie duplikowanie może stać się niewygodne. Ponieważ często będziesz pracować z powiązanymi zestawami danych, takimi jak średnie opady deszczu w różnych miesiącach w różnych miastach, przechowywanie tych zmiennych, ponieważ poszczególne wartości nie są opłacalne. Zamiast tego możesz użyć słowników języka Python.
Słowniki języka Python umożliwiają pracę z powiązanymi zestawami danych. Słownik jest kolekcją par klucz/wartość. Pomyśl o niej jak o grupie zmiennych wewnątrz kontenera, gdzie klucz jest nazwą zmiennej, a wartość jest wartością przechowywaną wewnątrz kontenera.
Tworzenie słownika
Język Python używa nawiasów klamrowych ({ }
) i dwukropka (:
), aby oznaczyć słownik. Możesz utworzyć pusty słownik i dodać wartości później lub wypełnić je w czasie tworzenia. Każdy klucz/wartość jest oddzielony dwukropkiem, a nazwa każdego klucza jest zawarta w cudzysłowie jako literał ciągu. Ponieważ klucz jest literałem ciągu, możesz użyć dowolnej nazwy, aby opisać tę wartość.
Utwórzmy słownik do przechowywania nazwy planety Ziemi, a liczba księżyców Na Ziemi:
planet = {
'name': 'Earth',
'moons': 1
}
Masz dwa klucze i 'name'
'moons'
. Każdy klucz zachowuje się w taki sam sposób jak zmienna: ma unikatową nazwę i przechowuje wartość. Jednak znajdują się one wewnątrz pojedynczej, większej zmiennej o nazwie planet
.
Podobnie jak w przypadku zmiennych regularnych, musisz upewnić się, że używasz poprawnych typów danych. moons
W wartości 1
w poprzednim przykładzie nie uwzględniliśmy cudzysłowów wokół liczby, ponieważ chcesz użyć liczby całkowitej. Jeśli użyto '1'
języka , język Python będzie widzieć tę zmienną jako ciąg, co wpłynie na możliwość wykonywania obliczeń.
W przeciwieństwie do zwykłych zmiennych nazwy kluczy nie muszą być zgodne ze standardowymi regułami nazewnictwa dla języka Python. Nazwy kluczy mogą być bardziej opisowe w kodzie.
Odczytywanie wartości słownika
Wartości można odczytywać w słowniku. Obiekty słownikowe mają metodę get
, której można użyć do uzyskania dostępu do wartości przy użyciu jego klucza. Jeśli chcesz wydrukować element name
, możesz użyć następującego kodu:
print(planet.get('name'))
Earth
Jak można podejrzewać, uzyskiwanie dostępu do wartości w słowniku jest typową operacją. Na szczęście istnieje skrót. Klucz można również przekazać do notacji nawiasu kwadratowego ([ ]
). Ta metoda używa mniej kodu niż get
, a większość programistów używa tej składni. Możesz ponownie napisać poprzedni przykład, używając następującego kodu:
# planet['name'] is identical to using planet.get('name')
print(planet['name'])
Earth
Chociaż zachowanie nawiasów get
kwadratowych () i nawiasów kwadratowych ([ ]
) jest zwykle takie samo w przypadku pobierania elementów, istnieje jedna kluczowa różnica. Jeśli klucz jest niedostępny, get
zwraca wartość None
i [ ]
zgłasza wartość KeyError
.
wibble = planet.get('wibble') # Returns None
wibble = planet['wibble'] # Throws KeyError
Modyfikowanie wartości słownika
Można również modyfikować wartości wewnątrz obiektu słownika update
przy użyciu metody . Ta metoda akceptuje słownik jako parametr i aktualizuje wszystkie istniejące wartości przy użyciu podanych przez Ciebie nowych. Jeśli chcesz zmienić name
słownik planet
, możesz użyć następującego kodu, na przykład:
planet.update({'name': 'Makemake'})
# No output: name is now set to Makemake.
Podobnie jak w przypadku skrótu nawiasów kwadratowych ([ ]
) do odczytywania wartości, możesz użyć tego samego skrótu, aby zmodyfikować wartości. Kluczową różnicą w składni jest użycie =
(czasami nazywanego operatorem przypisania ) w celu podania nowej wartości. Aby ponownie napisać poprzedni przykład, aby zmienić nazwę, możesz użyć następującego kodu:
planet['name'] = 'Makemake'
# No output: name is now set to Makemake.
Kluczową zaletą używania update
jest możliwość modyfikowania wielu wartości w jednej operacji. Dwa następne przykłady są logicznie takie same, ale składnia jest inna. Możesz używać dowolnej składni, która jest najbardziej odpowiednia. Większość deweloperów wybiera nawiasy kwadratowe, aby zaktualizować poszczególne wartości.
Poniższy przykład wprowadza te same zmiany w naszej planet
zmiennej, aktualizując nazwę i księżyce. Zwróć uwagę, że przy użyciu metody wykonujesz update
pojedyncze wywołanie funkcji, natomiast użycie nawiasów kwadratowych obejmuje dwa wywołania.
Korzystanie z aktualizacji:
planet.update({
'name': 'Jupiter',
'moons': 79
})
Używanie nawiasów kwadratowych:
planet['name'] = 'Jupiter'
planet['moons'] = 79
Dodawanie i usuwanie kluczy
Nie musisz tworzyć wszystkich kluczy podczas inicjowania słownika. W rzeczywistości nie musisz tworzyć żadnych! Za każdym razem, gdy chcesz utworzyć nowy klucz, przypiszesz go tak samo jak istniejący.
Załóżmy, że chcesz zaktualizować planet
okres orbitalny w dniach:
planet['orbital period'] = 4333
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# orbital period: 4333
# }
Ważne
Nazwy kluczy, podobnie jak wszystkie inne elementy w języku Python, są uwzględniane wielkości liter. W rezultacie 'name'
i 'Name'
są postrzegane jako dwa oddzielne klucze w słowniku języka Python.
Aby usunąć klucz, użyj polecenia pop
. pop
Zwraca wartość i usuwa klucz ze słownika. Aby usunąć orbital period
element , możesz użyć następującego kodu:
planet.pop('orbital period')
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# }
Złożone typy danych
Słowniki mogą przechowywać dowolny typ wartości, w tym inne słowniki. Umożliwia to modelowanie złożonych danych zgodnie z potrzebami. Wyobraź sobie, że trzeba przechowywać średnicę dla planet
wartości , która może być mierzona wokół równika lub biegunów. Możesz utworzyć inny słownik w pliku planet
, aby przechowywać te informacje:
# Add address
planet['diameter (km)'] = {
'polar': 133709,
'equatorial': 142984
}
# planet dictionary now contains: {
# name: 'Jupiter'
# moons: 79
# diameter (km): {
# polar: 133709
# equatorial: 142984
# }
# }
Aby pobrać wartości w zagnieżdżonym słowniku, należy połączyć nawiasy kwadratowe lub wywołać metodę get
.
print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')
Jupiter polar diameter: 133709