Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

Słowniki w Pythonie


powrót

W Pythonie słownik (dictionary) jest dynamiczną strukturą danych, która przechowuje pary klucz-wartość. Słownik jest jednym z wbudowanych typów danych i jest bardzo użyteczny w przypadku przechowywania i manipulowania danymi, w których klucze odnoszą się do odpowiadających im wartości.

Słowniki są odpowiednikami tablic asocjacyjnych, czyli tzw. map. opisanych w tym miejscu. Odwołując się do elementów listy używamy nawiasu kwadratowego [] podając numer indeksu danej jej komórki. Komórki listy numerujemy kolejnymi liczbami naturalnymi, czyli 0, 1, 2, ... itd. np.

lista = [1, 2, 3] # tworzymy listę
print(lista[0], lista[1], lista[2]) # wypisujemy elementy listy odwołując się poprzez indeksy: 0, 1 i 2.

W przypadku słowników, indeksem (kluczem) może być dowolny typ.

Tworzenie, dodawanie i wypisywanie elementów słownika
slownik = {} # utworzenie słownika

# utworzenie trzech elementów słownika
slownik["adam"] = 3 # klucz: adam, wartość: 3
slownik["iwona"] = 3.2
slownik[122] = "monika" # klucz: 122, wartość: monika

# wypisanie całego słownika
print(slownik) # {'adam': 3, 'iwona': 3.2, 122: 'monika'}

# wypisanie kluczy i wartości
for klucz, wartosc in slownik.items():
    print(klucz, wartosc)
"""
adam 3
iwona 3.2
122 monika
"""

# wypisanie samych klucz
for klucz in slownik:
    print(klucz)
"""
adam
iwona
122
"""

#wypisanie samych wartości
for wartosc in slownik.values():
    print(wartosc)
"""
3
3.2
monika
"""
Inicjacja wartości słownika, sposób II
# tworznie słownika wraz z wpisaniem trzech elementów
slownik = {"adam": 3, "iwona":3.2, 122: "monika"}

print(slownik["adam"]) # 3
print(slownik[122]) # monika
# print(slownik["ala ma kota"]) błąd, taki klucz nie istnieje

Pamiętaj! Nie możesz odwołać się do klucza, który nie został utworzony.

Metoda get()

Do wyłuskania wartości o podanym kluczu można użyć metody get(), która zwróci wartość domyślną None w sytuacji, gdy podany klucz nie istnieje:

# tworznie słownika wraz z wpisaniem trzech elementów
slownik = {"adam": 3, "iwona":3.2, 122: "monika"}

print(slownik.get("adam")) # 3
print(slownik.get(122)) # monika

print(slownik.get("ala ma kota")) # None
Sprawdzenie, czy klucz zawiera się w słowniku.
# tworznie słownika wraz z wpisaniem trzech elementów
slownik = {"adam": 3, "iwona":3.2, 122: "monika"}

#sprawdzenie, czy klucz "kinga" występuje w słowniku
if "kinga" in slownik:
    print("tak")
else:
    print("nie") # nie
Usuwanie elementów ze słownika.

Do usunięcia elementów słownika służy instrukcja del:

# tworznie słownika wraz z wpisaniem trzech elementów
slownik = {"adam": 3, "iwona":3.2, 122: "monika"}

#usunięcie elementu ze słownika, którego klucz = "adam
del slownik["adam"]

print(slownik)

# nie wolno usuwać elementów o nieistniejącym kluczu
# del slownik["kamila"]

Pamiętaj! Nie wolno usuwać elementów słownika o nieistniejącym kluczu.

Sortowanie elementów słownika po kluczu

Domyślnie elementy słownika nie są sortowane, jak to czasami bywa w tablicach asocjacyjnych w innych językach. Aby uporządkować elementy słownika należy użyć funkcji sorted, która zwróci posortowaną listę krotek zawierających pary klucz-wartość:

# tworznie słownika wraz z wpisaniem trzech elementów
slownik = {"kamil": 3, "iwona":3.2, "andrzej": 2}

#sortowanie elementów słownika po kluczu
posortowany_slownik = sorted(slownik.items())

print(posortowany_slownik) # [('andrzej', 2), ('iwona', 3.2), ('kamil', 3)]
Sortowanie elementów słownika po wartości

Aby posortować elementy słownika według wartości, możesz użyć funkcji sorted() w połączeniu z parametrem key, który określa funkcję klucza sortującego. Możesz użyć key=lambda x: x[1], aby sortować po drugim elemencie (wartości) w parach klucz-wartość.

# tworznie słownika wraz z wpisaniem trzech elementów
slownik = {"kamil": 3, "iwona":3.2, "andrzej": 2}

#sortowanie elementów po wartości
posortowany_slownik = sorted(slownik.items(), key=lambda x: x[1])

print(posortowany_slownik) # [('andrzej', 2), ('kamil', 3), ('iwona', 3.2)]

Przykładowe zadanie

Zadanie

Dla danego zbioru imiom wypisz liczbę wystąpień każdego z nich. Imiona uporządkuj alfabetycznie.

Wejście

W pierwszym wierszu pojawi się jedna liczba określająca ilość imion do wczytania. W kolejnych wiersza podawią się imiona złożone wyłącznie z wielkich liter języka łacińskiego.

Wyjście

Wypisz imiona oraz liczba wystąpień każdego z nich. Immiona uporządkuj alfabetycznie.

Przykład

Wejście
5
ADAM
MONIKA
ANNA
ANNA
ADAM
Wyjście
ADAM 2
ANNA 2
MONIKA 1
Rozwiązanie
slownik = {}
n = int(input())
for i in range(n):
    imie = input()
    if imie not in slownik:
        slownik[imie] = 1
    else:
        slownik[imie] += 1

wynik = sorted(slownik.items())

for imie, wystapienia in wynik:
    print(imie, wystapienia)