108
Rozdział 3.
k oraz found[k]
Iterowanie po kluczach i wartościach
Gdy iterowałeś po słowniku za pomocą pętli
for
, interpreter przetwarzał wyłącznie klucze tego
słownika.
Aby odwoływać się również do powiązanych z nimi danych, każdy z kluczy musisz umieścić
w nawiasach kwadratowych i używać wraz z nazwą słownika, co umożliwi Ci dostęp do
odpowiednich wartości.
Dokładnie to robi pętla przedstawiona poniżej, wyświetlając nie tylko same klucze, lecz również
powiązane z nimi wartości danych. Zmodyfikowaliśmy tu zestaw w taki sposób, aby za pomocą
każdego klucza występującego w pętli
for
uzyskać dostęp do każdej wartości.
Jako że pętla
for
iteruje po każdej parze klucz-wartość należącej do słownika, w każdym
przejściu klucz bieżącego wiersza jest najpierw przypisywany do zmiennej
k
, a dostęp do
powiązanej z nim wartości uzyskuje się następnie dzięki konstrukcji
found[k]
. Do wywołania
funkcji
print
dodaliśmy też dwa łańcuchy znakowe, aby nieco ułatwić Ci odczytanie danych
wyjściowych z ekranu.
obiekt
obiekt
obiekt
obiekt
klucz nr 1
klucz nr 2
klucz nr 3
klucz nr 4
Słownik
>>> for k in found:
print(k, ‘znaleziono’, found[k], ‘raz(y).’)
o znaleziono 0 raz(y).
i znaleziono 0 raz(y).
a znaleziono 0 raz(y).
u znaleziono 0 raz(y).
e znaleziono 2 raz(y).
Używamy zmiennej k do
reprezentowania klucza,
a konstrukcji found[k]
w celu uzyskania dostępu
do wartości.
To wygląda już o niebo lepiej. Zarówno
klucze, jak i wartości zostały przetworzone
przez pętlę i wyświetlone na ekranie.
Jeśli podczas czytania wykonujesz poszczególne operacje w swojej powłoce, a Twoje dane wyjściowe
są ułożone na ekranie w innej kolejności niż nasze, nie martw się. Gdy wykonujesz poszczególne
operacje na słowniku, interpreter wewnętrznie układa jego dane w sposób losowy i nie gwarantuje
tu zastosowania jakiegokolwiek określonego porządku. Kolejność Twoich danych prawdopodobnie
będzie się różniła od tej, którą zaobserwowaliśmy my, nie powinieneś jednak się tym niepokoić.
Naszą główną troską jest to, aby dane były bezpiecznie przechowywane w słowniku, i tak właśnie jest.
Przedstawiona powyżej pętla w
oczywisty sposób działa. Jest jeszcze jednak kilka rzeczy,
o które powinniśmy tu zadbać.
Po pierwsze, byłoby miło, gdyby dane wyjściowe były uporządkowane alfabetycznie
(tj. w kolejności:
a
,
e
,
i
,
o
,
u
), a nie losowo, jak teraz, prawda?
Po drugie, mimo że wyraźnie widać, iż pętla ta działa, zastosowany tu sposób iterowania po słowniku
nie jest preferowany, co oznacza, że większość programistów Pythona zrobiłaby to nieco inaczej.
Omówmy obydwa te punkty nieco dokładniej (najpierw jednak zróbmy mały przegląd
przedstawionego do tej pory materiału).
jesteś tutaj�
109
Dane strukturalne
Słowniki: co już wiemy
Poniżej znajdziesz podsumowanie wiadomości, które udało nam się do tej pory zdobyć na temat
struktury danych, jaką jest słownik.
>>> for k in sorted(found):
print(k, ‘znaleziono’, found[k], ‘raz(y).’)
a znaleziono 0 raz(y).
e znaleziono 2 raz(y).
i znaleziono 0 raz(y).
o znaleziono 0 raz(y).
u znaleziono 0 raz(y).
To bardzo niewielka modyfikacja kodu pętli,
ale... daje całkiem sporo. Spójrz tylko:
dane wyjściowe są posortowane
w kolejności alfabetycznej.
CELNE SPOSTRZEŻENIA
Traktuj słownik jak kolekcję wierszy, z których
każdy ma dokładnie dwie kolumny. Pierwsza
z nich przechowuje klucz, podczas gdy druga
zawiera wartość.
Każdy wiersz określany jest mianem pary klucz-
wartość, a słownik może się powiększać w taki
sposób, aby zawierać dowolną liczbę takich par.
Podobnie jak listy, słowniki mogą się rozrastać
lub kurczyć w zależności od potrzeb.
Słownik łatwo jest znaleźć w kodzie: jest
umieszczony w nawiasach klamrowych, każda
znajdująca się w nim para klucz-wartość jest
oddzielona przecinkiem od kolejnej, a każdy klucz
jest oddzielony od odpowiadającej mu wartości
za pomocą dwukropka.
Słownik
nie
zachowuje porządku, w jakim
wstawiane są wiersze. Kolejność umieszczania
wierszy nie wpływa w żaden sposób na to,
jak są one zapisywane w pamięci.
Do danych przechowywanych przez słownik
można się odwołać, korzystając z notacji
nawiasów kwadratowych. Aby uzyskać dostęp
do określonej wartości, należy umieścić w takich
nawiasach odpowiadający jej klucz.
Zapewniana przez Pythona pętla for może być
wykorzystywana do iterowania po słowniku.
Przy każdej iteracji klucz zostaje przypisany
do zmiennej pętli, która jest używana do
odwoływania się do wartości danej..
Określanie porządku słownika na wyjściu
Chcemy mieć możliwość wyświetlenia danych przetwarzanych w pętli
for
w wybranej przez nas
kolejności (
a
,
e
,
i
,
o
,
u
) zamiast w kolejności losowej, jak miało to miejsce do tej pory. Język Python
sprawia, że zadanie to jest wręcz trywialne, a to dzięki istnieniu wbudowanej funkcji
sorted
.
Wystarczy, że tworząc swoją pętlę
for
, jako argument wywołania przekażesz tej funkcji słownik
found
, a dane wyjściowe zostaną ułożone alfabetycznie, tak jak zostało to przedstawione poniżej.
To pierwsza rzecz, którą mieliśmy zamiar się zająć. Teraz dowiemy się, jakie podejście do tworzenia kodu
preferuje większość programistów Pythona ponad to, które zostało pokazane powyżej na tej stronie (choć
i to ostatnie jest często stosowane w praktyce, dlatego zdecydowanie powinieneś wiedzieć również o nim).
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.