Ta strona wykorzystuje ciasteczka ("cookies") w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Czy wyrażasz na to zgodę?

Czytaj więcej
< All Topics
Print

Słowniki

Budowa i zastosowanie słownika

 

Ten typ danych, pozornie bardzo skomplikowany, został wyróżniony po to, by pewne operacje na długich bazach danych wykonywane były szybciej niż na listach. Słownik można zdefiniować jako zbiór elementów, z których każdy ma uniwersalny klucz. Kluczem może być liczba, znak, tekst a nawet typy złożone, które nie podlegają modyfikacjom (np. krotka).

Słowniki tworzone są jako ciąg elementów objętych nawiasami klamrowymi, przy czym każdy z elementów ma postać “Klucz : wartości”. Elementy takie rozdzielone są przecinkami.

abc1={1:'a',2:'b',3:'e',4:'c',5:'a',6:'d',7:'ł',8:'o'}
abc2={'a':1,'b':2, 'e':3, 'c':4, 'a':5, 'd':6, 'ł':7, 'o':8}
print(abc1)
print(abc2)
>>>
{1: 'a', 2: 'b', 3: 'e', 4: 'c', 5: 'a', 6: 'd', 7: 'ł', 8: 'o'}
{'a': 5, 'b': 2, 'e': 3, 'c': 4, 'd': 6, 'ł': 7, 'o': 8}

W drugim słowniku nie znalazła się liczba 5, jako że dostała taki sam klucz jak liczba 1.

kontakty1={678956008:'Ania',660832500:'Basia',985342220:'Ania',776680776:'Edek'}
kontakty2={'Ania':678956008,'Basia':660832500,'Edek':776680776,'Kamil':776680776}
kontakty3={1:['Ania',678956008],2:['Basia',660832500],3:['Ania',985342220],
4:['Edek',776680776],5:['Kamil',776680776]}
print(kontakty1)
print(kontakty2)
print(kontakty3)
>>>
{678956008: 'Ania', 660832500: 'Basia', 985342220: 'Ania', 776680776: 'Edek'}
{'Ania': 678956008, 'Basia': 660832500, 'Edek': 776680776, 'Kamil': 776680776}
{1: ['Ania', 678956008], 2: ['Basia', 660832500], 3: ['Ania', 985342220], 
4: ['Edek', 776680776], 5: ['Kamil', 776680776]}

 

 

Tworzenie słownika

 

Tworzenie użytecznego słownika wymaga przemyśleń. Jak ma zostać zrobiony spis telefonów kolegów w postaci słownika? Czy kluczem ma być numer telefonu, a wartością dane o osobie, czy odwrotnie. Klucze nie mogą się powtarzać, zatem różnym Aniom nie można przypisać klucza ‘Ania’. Z kolei bliźniaki Edek i Kamil używają tego samego telefonu, więc albo Kamila wykreślamy z listy albo numer telefonu jest wartością, a nazwa właściciela kluczem. Wydaje się, że najbezpieczniej jest przyjąć trzecie rozwiązanie: utworzyć słownik z list obiektów, dla których kluczem są kolejne liczby całkowite.

Słownik w Pythonie można utworzyć poprzez wypisanie wszystkich wyrażeń zgodnie z budowa słownika albo za pomocą funkcji ‘dict’ która tworzy słowniki z list krotek albo wyrażeń połączonych znakami równości.

alfabet=[(1,'a'),(2,'b'),(3,'e'),(4,'c'),(5,'a'),(6,'d'),(7,'ł'),(8,'o')]
A=dict(alfabet)
B=dict(Ania=678956008, Basia=660832500, Edek=776680776, Kamil=776680776)
print(A)
print(B)
>>>
{1: 'a', 2: 'b', 3: 'e', 4: 'c', 5: 'a', 6: 'd', 7: 'ł', 8: 'o'}
{'Ania': 678956008, 'Basia': 660832500, 'Edek': 776680776, 'Kamil': 776680776}

Jednak drugi przykład nie jest możliwy, gdy kluczem mają być liczby.

 

 

Odwołanie się do elementów słownika

 

Jeżeli ‘i’ jest pewna wartością klucza w pewnym słowniku to napisanie [i] po jego nazwie i wyświetla element, którego klucz jest równy i.

kontakty={1:['Ania',678956008,"Mokotów"],2:['Basia',660832500],
3:['Ania',985342220,"Wola"],4:['Edek',776680776,'rano'],
5:['Kamil',776680776,'po południu']}
print(kontakty,"\n")
print(kontakty[1])
print(kontakty[3])
print(kontakty[0])
>>>
{1: ['Ania', 678956008, 'Mokotów'], 2: ['Basia', 660832500], 3: ['Ania', 985342220, 'Wola'],
4: ['Edek', 776680776, 'rano'], 5: ['Kamil', 776680776, 'po południu']}
['Ania', 678956008, 'Mokotów']['Ania', 985342220, 'Wola']
Traceback (most recent call last):
  File "C:\Users\User\OneDrive\Pulpit\A.py", line 6, in 
  <module>/font>
print(kontakty[0])
KeyError: 0

Próba wyświetlenia pierwszego elementu listy poprzez indeks spowodowała błąd, jako że wśród kluczy nie występuje 0.

 

Edycja słownika

Do słownika dodaje się element biorąc nowy, nieużywany jeszcze klucz i wpisując jego wartość.

kontakty={1:['Ania',678956008,"Mokotów"],2:['Basia',660832500],
3:['Ania',985342220,"Wola"],4:['Edek',776680776,'rano'],
5:['Kamil',776680776,'po południu']}
kontakty[6]=['Marysia', 776894322, 'blondynka']
print(kontakty) 
>>>
{1: ['Ania', 678956008, 'Mokotów'], 2: ['Basia', 660832500], 
3: ['Ania', 985342220, 'Wola'], 4: ['Edek', 776680776, 'rano'], 
5: ['Kamil', 776680776, 'po południu'],6: ['Marysia', 776894322, 'blondynka']}

Kasowanie pewnych elementów słownika można wykonać instrukcja “del”.

kontakty={1:['Ania',678956008,"Mokotów"],2:['Basia',660832500],
3:['Ania',985342220,"Wola"],4:['Edek',776680776,'rano'],
5:['Kamil',776680776,'po południu']}
del kontakty[2]
print(kontakty)
>>>
{1: ['Ania', 678956008, 'Mokotów'], 3: ['Ania', 985342220, 'Wola'], 
4: ['Edek', 776680776, 'rano'], 5: ['Kamil', 776680776, 'po południu']}
Instrukcja przypisania nie tworzy kopii zapasowej słownika, bo operacje zmian są zapisywane zarówno w starej jak i nowej wersji słownika.
kontakty={1:['Ania',678956008,"Mokotów"],2:['Basia',660832500],
3:['Ania',985342220,"Wola"],4:['Edek',776680776,'rano'],
5:['Kamil',776680776,'po południu']}
stare_kontakty=kontakty
kontakty[6]=['Marysia', 776894322, 'blondynka']
del kontakty[2]
print(stare_kontakty,"\n")
print(kontakty)
>>>
{1: ['Ania', 678956008, 'Mokotów'], 3: ['Ania', 985342220, 'Wola'],
4: ['Edek', 776680776, 'rano'], 5: ['Kamil', 776680776, 'po południu'],
6: ['Marysia', 776894322, 'blondynka']}
{1: ['Ania', 678956008, 'Mokotów'], 3: ['Ania', 985342220, 'Wola'],
4: ['Edek', 776680776, 'rano'], 5: ['Kamil', 776680776, 'po południu'],
6: ['Marysia', 776894322, 'blondynka']}

Do wykonania prawdziwej kopii słownika należy użyć metody ‘copy’.

 

Metody działające na słownikach

Prawdziwą kopię słownika wykonujemy za pomocą metody ‘copy’.

kontakty={1:['Ania',678956008,"Mokotów"],2:['Basia',660832500],
3:['Ania',985342220,"Wola"],4:['Edek',776680776,'rano'],
5:['Kamil',776680776,'po południu']}
starekontakty=kontakty.copy()
kontakty[6]=['Marysia', 776894322, 'blondynka']
del kontakty[2]
print(starekontakty,"\n")
print(kontakty)
>>>
{1: ['Ania', 678956008, 'Mokotów'],2: ['Basia', 660832500], 
3: ['Ania', 985342220, 'Wola'],4: ['Edek', 776680776, 'rano'], 
5: ['Kamil', 776680776, 'po południu']}
{1: ['Ania', 678956008, 'Mokotów'], 3: ['Ania', 985342220, 'Wola'], 
4: ['Edek', 776680776, 'rano'], 5: ['Kamil', 776680776, 'po południu'], 
6: ['Marysia', 776894322, 'blondynka']}

Metoda ‘keys’ służy do wyświetlania kluczy słownika. Natomiast ‘values’ służy do wyświetlania jego wartości.

kontakty={1:['Ania',678956008,"Mokotów"],
2:['Basia',660832500],3:['Ania',985342220,"Wola"],
4:['Edek',776680776,'rano'],5:['Kamil',776680776,'po południu']}
print(kontakty.keys())
print(kontakty.values())
>>>
dict_keys([1, 2, 3, 4, 5])
dict_values([['Ania', 678956008, 'Mokotów'], ['Basia', 660832500], 
['Ania', 985342220, 'Wola'],
['Edek', 776680776, 'rano'], ['Kamil', 776680776, 'po południu']])

 

Funkcje działające na słownikach

Funkcja ‘list()’ zastosowana dla słownika pokazuje ciąg kluczy w postaci listy.

alfabet={'a':1,'b':2, 'e':3, 'c':4, 'a':5, 'd':6, 'ł':7, 'o':8}
kontakty2={'Kamil':776680776, 'Ania':678956008, 'Basia':660832500,'Edek':776680776}
print(list(alfabet))
print(list(kontakty2))
>>>
['a', 'b', 'e', 'c', 'd', 'ł', 'o']
['Kamil', 'Ania', 'Basia', 'Edek']

Ponieważ w pierwszym słowniku liczba 5 dostała taki sam klucz jak liczba 1 to liczba 5 wogóle nie jest zauważana w słowniku.

Funkcja “sorted” zastosowana dla słownika pokazuje posortowany ciąg kluczy w postaci listy.

alfabet={'a':1,'b':2, 'e':3, 'c':4, 'a':5, 'd':6, 'ł':7, 'o':8}
kontakty2={'Kamil':776680776, 'Ania':678956008, 'Basia':660832500,'Edek':776680776}
print(sorted(alfabet))
print(sorted(kontakty2))
>>>
['a', 'b', 'c', 'd', 'e', 'o', 'ł']
['Ania', 'Basia', 'Edek', 'Kamil']

Przy porządkowaniu tekstów Python stosuje pierwszeństwo zgodnie z porządkiem wyznaczonym przez numery symboli w kodzie ASCI i litera ‘ł’ znalazła się po ‘o’, jako że w tym kodzie zajmuje dużo dalsze miejsce.

Spis treści