PyTraning 2.0 #5: Ssssssssss jak słowniki.
-
Upload
kaja-milanowska -
Category
Software
-
view
1.291 -
download
0
Transcript of PyTraning 2.0 #5: Ssssssssss jak słowniki.
![Page 1: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/1.jpg)
![Page 2: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/2.jpg)
PyTraning2.0 #5:Ssssssssss jak słowniki..
Słowniki, pętle
![Page 3: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/3.jpg)
user_38251
9feSI6ru3na
![Page 4: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/4.jpg)
Zadanie 1
Jakie typy danych tu widzimy?
Dzieci: Ania, Marcin, Sebastian, Weronika, Maks, Zbyszek, Marysia, Kasia
Prezenty: Klocki Lego, Gra planszowa, Książka, Ciepłe skarpety, Tablet, Sweter, Sweter, Rózga
Miasta: Poznań, Kraków, Bielsko Biała
Liczba prezentów: (5, 2, 1)
Czy grzeczne? [True, False, True,
True, False, True, True, True]
![Page 5: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/5.jpg)
Typy danych
Typy proste• Całkowity (int)
• Zmiennopozycyjny (float)• Tesktowy (str) • Logiczny (bool)
• Zespolony (complex)
Typy strukturalne • Lista (list)
• Krotka (tuple) • Zbiór (set)
• Słownik, tabela (dict)
![Page 6: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/6.jpg)
Typy danych
Typy proste• Całkowity (int)
• Zmiennopozycyjny (float)• Tesktowy (str) • Logiczny (bool)
• Zespolony (complex)
Typy strukturalne • Lista (list)
• Krotka (tuple) • Zbiór (set)
• Słownik, tabela (dict)
![Page 7: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/7.jpg)
li = [5,2,1]
li.count(0) li[2]
li.pop()
li[1:-1]
len(li)
2 in li
li.append('A') li.sort()
Przypomnienie
![Page 8: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/8.jpg)
a == [1,3,4]
a = [1,3,4,5]
a == [1,3,4,5,3]
a == [3,5,4,3,1]
a == [3,4,3,1]
a == [1,3,3,4]
a == [1,3,3,4,4]
Przypomnienie
1) a.reverse()
2) a.sort()
3) a.pop()
4) a.append(4)
5) a = a + [5,3]
6) a.remove(5)
3)
5)
1)
6)
2)
4
![Page 9: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/9.jpg)
a == [1,3,4]
a = [1,3,4,5]
a == [1,3,4,5,3]
a == [3,5,4,3,1]
a == [3,4,3,1]
a == [1,3,3,4]
a == [1,3,3,4,4]
Przypomnienie
1) a.reverse()
2) a.sort()
3) a.pop()
4) a.append(4)
5) a = a + [5,3]
6) a.remove(5)
3)
5)
1)
6)
2)
4
![Page 10: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/10.jpg)
a == ['A','B','B','c',None,3]
a = ['A','B','c',None,3]
a == ['B','c',None]
a == ['c','c']
a == ['c','c','c']
a == ['c','c']
1) a = a[2:5]
2) a = [a[-2]] +
[a[1]]
3) a = a[:2]
4) a = [a[-1]]*3
5) a = a[:2] + a[1:]
Przypomnienie
5)
1)
2)
4)
3)
![Page 11: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/11.jpg)
a == ['A','B','B','c',None,3]
a = ['A','B','c',None,3]
a == ['B','c',None]
a == ['c','c']
a == ['c','c','c']
a == ['c','c']
1) a = a[2:5]
2) a = [a[-2]] +
[a[1]]
3) a = a[:2]
4) a = [a[-1]]*3
5) a = a[:2] + a[1:]
Przypomnienie
5)
1)
2)
4)
3)
![Page 12: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/12.jpg)
Zadanie 2 – listy, krotki -powtórka
Pomóż PyMikołajowi zrobić unikatową listę prezentów w porządku alfabetycznym i rozdziel ją
później na dwie krotki o równej wielkości.prezenty = ['Domek dla lalek','Tablet','Rozga','Rower','Tablet','Ksiazka','Telefon',
'Pilka','Sweter','Ksiazka','Bilet do kina','Gra planszowa','Xbox','Gra komputerowa',
'Szalik','Slodycze','Mis pluszowy','Pizama','Tablet','Telefon','Ksiazka','Klawiatura',
'Zestaw do szycia','Zestaw do malowania','Maly majsterkowicz','Maly chemik','Lalka Barbie',
'Lyzwy','Klocki Lego','Samochodziki','Film','Slodycze','Szczeniak','Sweter','Narty']
dzieci = ['Ania P','Irek','Tadek','Marcin K','Karolina','Romek','Wiktoria','Witek',
'Pawel','Dominika','Marcin M','Blazej','Ania J','Grzegorz','Agnieszka','Marcelina',
'Klaudia','Marta','Piotr','Gosia','Kasia L','Kasia K','Tytus','Maja','Tymon','Marcin W',
'Robert','Zosia','Magda','Julia','Bartek','Andrzej','Zbyszek','Edek']
![Page 13: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/13.jpg)
Zadanie 2 – listy, krotki -powtórka
Pomóż PyMikołajowi zrobić unikatową listę prezentów w porządku alfabetycznym i rozdziel ją
później na dwie krotki o równej wielkości.
>>> unikatowe_prezenty = set(prezenty)
>>> len(unikatowe_prezenty)
28
>>> unikatowe_prezenty = tuple(unikatowe_prezenty)
>>> unikatowe_prezenty.sort()
>>> unikatowe_prezenty_1 = unikatowe_prezenty[14:]
>>> unikatowe_prezenty_2 = unikatowe_prezenty[:14]
>>> print(unikatowe_prezenty, unikatowe_prezenty_1 ,
unikatowe_prezenty_2)
![Page 14: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/14.jpg)
Zadanie 2 – listy, krotki -powtórka
Pomóż PyMikołajowi zrobić unikatową listę prezentów w porządku alfabetycznym i rozdziel ją
później na dwie krotki o równej wielkości.
>>> unikatowe_prezenty = set(prezenty)
>>> len(unikatowe_prezenty)
28
>>> unikatowe_prezenty = tuple(unikatowe_prezenty)
>>> unikatowe_prezenty.sort()
>>> unikatowe_prezenty_1 = unikatowe_prezenty[14:]
>>> unikatowe_prezenty_2 = unikatowe_prezenty[:14]
>>> print(unikatowe_prezenty, unikatowe_prezenty_1 ,
unikatowe_prezenty_2)
>>> unikatowe_prezenty = tuple(sorted(set(prezenty)))
Te trzy komendy można zapisać w jednej linijce
![Page 15: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/15.jpg)
Typy danych
Typy proste• Całkowity (int)
• Zmiennopozycyjny (float)• Tesktowy (str) • Logiczny (bool)
• Zespolony (complex)
Typy strukturalne • Lista (list)
• Krotka (tuple) • Zbiór (set)
• Słownik, tabela (dict)
![Page 16: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/16.jpg)
Słowniki Zmienny (modyfikowalny), nieposortowany zestaw par
klucz:wartość Wartością może być dowolny obiekt Pythonowy.
Słownik nie jest sekwencją, gdyż w sekwencji istnieje porządek, a słownik są nieuporządkowane
Indeksem słownika jest klucz - kluczem, może być dowolny niezmienny typ.
Klucze: liczby, stringi, krotka – wyłącznie, jeśli każdy jej element jest typem niezmiennym
Lista za to nie może stanowić klucza w słowniku ponieważ jest typem zmiennym.
![Page 17: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/17.jpg)
Słowniki Słownik tworzymy umieszczając klucz:wartość w
nawiasach klamrowych
nowy_dict = {klucz1:wartość1, klucz2:wartoość2, klucz3:wartość3}
Pusty słownik – pusty_dict = {}
do pustego słownika możemy dodawać elementy: pusty_dict[klucz]=wartosc
klucze muszą być unikatowe, chyba, że chcemy nadpisać wartość dla danego klucza
>>> nowy_dict = {klucz1:wartość1, klucz2:wartość2,
klucz3:wartość3}
![Page 18: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/18.jpg)
Słowniki – metody i funkcje>>> slownik = {}
>>> dir(slownik)
['__class__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> del slownik[klucz]
>>> len(slownik)
>>> help(slownik)
>>> help(slownik.update)
![Page 19: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/19.jpg)
Stwórz słownik składający się z dwóch par klucz:wartość – np. imię dziecka i prezent.
Następnie wyświetl prezenty dla dzieci. Dodaj nową parę dziecko:prezent.
Zadanie 3
![Page 20: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/20.jpg)
Stwórz słownik składający się z dwóch par klucz:wartość – np. imię dziecka i prezent.
Następnie wyświetl prezenty dla dzieci. Dodaj nową parę dziecko:prezent.
Zadanie 3
>>> prezenty_dla_dzieci = {'Kasia':'Mis pluszowy',
'Andrzej':'Tablet'}
>>> print(prezenty_dla_dzieci['Kasia'])
Mis pluszowy
>>> print(prezenty_dla_dzieci['Andrzej']
Tablet
>>> prezenty_dla_dzieci['Michal']='Telefon'
>>> prezenty_dla_dzieci.update({'Karol':'Gra planszowa'})
![Page 21: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/21.jpg)
Pętle służą do powtarzania czynności
Budowa pętli:
Dla czegoś w zbiorze:
zrób określoną czynność
for sth in list/tuple/set/string/range:
do_sth(sth)
Pętle - For
![Page 22: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/22.jpg)
Pętle - For
![Page 23: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/23.jpg)
Pętle - For
![Page 24: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/24.jpg)
Pętle - For
![Page 25: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/25.jpg)
Pętle - For
![Page 26: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/26.jpg)
Zadanie 4
Narysuj choinkę według poniższych instrukcji (zapisz instrukcje w pliku choinka.py i go odpal):
tree_element = ' * '
print(tree_element)
tree_element = ' *** '
print(tree_element)
tree_element = ' ***** '
print(tree_element)
tree_element = '*******'
print(tree_element)
![Page 27: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/27.jpg)
Zadanie 5
Teraz narysuj choinkę używając pętli for i poniższej listy:
choinka = [' * ', ' *** ', ' ***** ', '*******']
![Page 28: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/28.jpg)
Zadanie 5
Teraz narysuj choinkę używając pętli for i poniższej listy:
choinka = [' * ', ' *** ', ' ***** ', '*******']
for tree_element in choinka:
print(tree_element)
![Page 29: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/29.jpg)
Zadanie 6
Pomóż Mikołajowi wyświetlić po kolei na ekranie wszystkie unikatowe prezenty z pierwszej tupliprezentów razem z ich indeksem w tejże tupli.
![Page 30: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/30.jpg)
Zadanie 6
Rower 0
Tablet 1
Zestaw do szycia 2
Szczeniak 3
Szalik 4
Lalka Barbie 5
Pizama 6
Narty 7
Lyzwy 8
Bilet do kina 9
Domek dla lalek 10
Rozga 11
Sweter 12
Samochodziki 13
>>> counter = 0
>>> for prezent in unikatowe_prezenty_1:
print(prezent, n)
n += 1
Definiujemy licznik, który będzie nam liczył kolejne przejścia pętli for. Pętla for idzie po kolei po każdym elemencie podanej sekwencji (np. lista/tupla/string/w słowniku po kluczach), dlatego też każde przejście pętli może nam wskazać, na którym elemencie obecnie jesteśmy. Należy pamiętać, że w Pythonie pierwszy indeks jest 0, więc definiujemy licznik jako 0 i na końcu pętli go zwiększamy, czyli liczymy, która pętla się skończyła –przechodzimy do następnego elementu – obecnie counterma już wartość 1, co odpowiada indeksowi kolejnego elementu. I tak do końca sekwencji.
![Page 31: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/31.jpg)
Zadanie 6
Rower 0
Tablet 1
Zestaw do szycia 2
Szczeniak 3
Szalik 4
Lalka Barbie 5
Pizama 6
Narty 7
Lyzwy 8
Bilet do kina 9
Domek dla lalek 10
Rozga 11
Sweter 12
Samochodziki 13
>>> for index in range(len(unikatowe_prezenty_1)):
print(unikatowe_prezenty_1[index], index)
Definiujemy zakres indeksów wpierw -> for numer in range() – jako rangepodajemy zakres jaki chcemy brać pod uwagę – w tym przypadku długość naszej sekwencji (tutaj listy). Idziemy po kolei po indeksach i z ich użyciem wywołujemy elementy listy (lista[index]).
![Page 32: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/32.jpg)
Zadanie 6
Rower 0
Tablet 1
Zestaw do szycia 2
Szczeniak 3
Szalik 4
Lalka Barbie 5
Pizama 6
Narty 7
Lyzwy 8
Bilet do kina 9
Domek dla lalek 10
Rozga 11
Sweter 12
Samochodziki 13
>>> for index, prezent in enumerate(unikatowe_prezenty_1):
print(prezent, index)
enumerate() to funkcja, która zwraca tuple w postaci (counter, element) – u nas jest to index i prezent. Jeśli zrobimy:
for el in enumerate(list):print el
To zobaczymy:(0, element_listy_0)(1, element_listy_1)….(n, element_listy_n)
W tej pętli do indexu i prezentu przypisujemy adekwatnie 0 i 1 element tupli.
![Page 33: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/33.jpg)
Zadanie 6
Rower 0
Tablet 1
Zestaw do szycia 2
Szczeniak 3
Szalik 4
Lalka Barbie 5
Pizama 6
Narty 7
Lyzwy 8
Bilet do kina 9
Domek dla lalek 10
Rozga 11
Sweter 12
Samochodziki 13
>>> for prezent in unikatowe_prezenty_1:
print(prezent, unikatowe_prezenty.index(prezent))
lista.index(element) zwraca indeks pierwszego obiektu w liście, który będzie == element. Ta metoda zadziała jedynie, gdy w naszej sekwencji będziemy mieć unikatowe obiekty. W momencie, gdy obiekty będą się powtarzać, metoda zwróci za każdym razem indeks pierwszego wystąpienia danego obiektu.
![Page 34: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/34.jpg)
Zadanie 6.1>>> for el in range (len(unikatowe_prezenty_1)):
print(unikatowe_prezenty_1[el])
???
>>> n = 0
>>> for el in unikatowe_prezenty_1:
print(unikatowe_prezenty_1[n])
n+=1
???
>>> for el in enumerate(unikatowe_prezenty_1):
print(unikatowe_prezenty_1[el[0]])
???
>>> for el in unikatowe_prezenty_1:
print(unikatowe_prezenty_1[unikatowe_prezenty_1.index(el)])
???
Dla utrwalenia
![Page 35: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/35.jpg)
Zadanie 6.1
??? =
>>> #wszystkie komendy powinny zwrócić
Rower
Tablet
Zestaw do szycia
Szczeniak
Szalik
Lalka Barbie
Pizama
Narty
Lyzwy
Bilet do kina
Domek dla lalek
Rozga
Sweter
Samochodziki
![Page 36: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/36.jpg)
Zadanie 6.2
>>> for prezent in sorted(set(prezenty)):
print prezent
Dla utrwalenia
Jeśli chcemy wyświetlić unikatowe elementy z listy w porządku alfabetycznym bez tworzenia samemu
nowych zmiennych możemy to zrobić za jednym razem.
![Page 37: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/37.jpg)
Zadanie 7
Wyświetl teraz po kolei na ekranie wszystkie pary z utworzonego przez siebie słownika prezentów
dla dzieci.
![Page 38: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/38.jpg)
Zadanie 7
Wyświetl teraz po kolei na ekranie wszystkie pary z utworzonego przez siebie słownika prezentów
dla dzieci.>>> for dziecko in prezenty_dla_dzieci:
print(dziecko, prezenty_dla_dzieci[dziecko])
Słownik jest nieuporządkowany, w związku z czym tak naprawdę nie przechodzimy tutaj po słowniku, a po liście jego kluczy.
![Page 39: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/39.jpg)
Połączmy wszystko!!
![Page 40: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/40.jpg)
Zadanie 8
Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu
przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci
jest unikatowa.
![Page 41: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/41.jpg)
Zadanie 8
Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu
przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci
jest unikatowa.
Hint? <pokaż spojler>
![Page 42: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/42.jpg)
Zadanie 8
Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu
przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci
jest unikatowa.
Użyj pętli for
![Page 43: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/43.jpg)
Zadanie 8
Połącz obie listy – dzieci i prezenty - w słownik w taki sposób, by dziecko było kluczem a prezent mu
przypisany wartością. Pamiętaj, że klucze muszą być unikatowe! Sprawdź wpierw czy lista dzieci
jest unikatowa.
Użyj pętli forSkorzystaj z zadania 6
![Page 44: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/44.jpg)
Zadanie 8>>> dzieci_i_prezenty = {}
>>> len(prezenty)
35
>>> len(dzieci)
35
>>> len(set(dzieci))
35
>>> len(dzieci) == len(set(dzieci))
True
Uproszczona wersja – zakładamy, że działamy na liście unikatowych kluczy. W przypadku, gdybyśmy mieli listę dzieci z powtarzającymi się imionami trzeba by do pętli for tworzącej słownik (czyli następne slajdy) – dołączyć wyrażenie warunkowe – co robić, gdy dany klucz już mamy i nie chcemy go nadpisywać.
Tutaj dzieci są unikatowe, więc nie będzie problemu z nadpisaniem.
Sprawdzam też czy obie listy są równej długości, żeby nie pojawił się później problem, gdyby lista np. dzieci była dłuższa i próbowalibyśmy dodać prezent z pozycji, która w liście prezentów nie istnieje.
![Page 45: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/45.jpg)
Zadanie 8 – rozwiązanie 1>>> dzieci_i_prezenty = {}
>>> for index in range(dzieci):
dzieci_i_prezenty[dzieci[index]] = prezenty[index]
>>> print(dzieci_i_prezenty)
Bierzemy zakres od 0 do długości listy dzieci. Po kolei będziemy odnosić się a pomocą indeksu zarówno do listy dzieci, jak i listy prezentów. Temu samemu indeksowi z listy dzieci będzie odpowiadać obiekt z listy prezentów.
![Page 46: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/46.jpg)
Zadanie 8 – rozwiązanie 2>>> dzieci_i_prezenty = {}
>>> for index, dziecko in enumerate(dzieci):
dzieci_i_prezenty[dziecko] = prezenty[index]
>>> print(dzieci_i_prezenty)
Enumerate zwraca nam tuplę, która posiada indeks (licznik) i wartość z listy. Dlatego też nie musimy już odnosić się do listy dzieci podczas tworzenia pary klucz:wartość. Z listy prezentów pobieramy element znajdujący się w pozycji, określonej przez indeks.
![Page 47: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/47.jpg)
Zadanie 8 – rozwiązanie 3>>> dzieci_i_prezenty = {}
>>> n = 0
>>> for dziecko in dzieci:
dzieci_i_prezenty[dziecko] = prezenty[n]
n += 1
>>> print(dzieci_i_prezenty)
Jak wcześniej przy enumerate, tylko tutaj sami tworzymy licznik, który będzie nam liczył przejścia pętli.
![Page 48: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/48.jpg)
Zadanie 8 – rozwiązanie 4>>> dzieci_i_prezenty = {}
>>> for dziecko, prezent in zip(dzieci, prezenty):
dzieci_i_prezenty[dziecko] = prezent
>>> print(dzieci_i_prezenty)
Funkcja zip łączy listy/tuple, tworząc nowy obiekt zip:
>>> c = zip(dzieci,prezenty)>>> c<zip object at 0x000000000513B388>
Kolejne elementy w tym obiekcie to tuple w postaci (dziecko, prezent) z kolejnych pozycji obu list/tupli. (chyba, że mamy więcej list/tupli podanych to tuple będą wtedy w postaci (a,b,..,n))
Ilość takich tupli równa się długości najkrótszej listy/tupli – czyli możemy łączyć sekwencje różnej długości.
Możemy zobaczyć jak wygląda taki zip zmieniając jego typ -> np.:>>> print(list(c))
![Page 49: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/49.jpg)
Zadanie 8 – rozwiązanie 5>>> dzieci_i_prezenty = {}
>>> dzieci_i_prezenty = dict(zip(dzieci, prezenty))
>>> print(dzieci_i_prezenty)
Jak wyżej. Jednakże w przypadku, gdy za pomocą zipa łączymy 2 listy/tuple – wówczas możemy użyć funkcji dict, by od razu obiekt zip zmienić na słownik. Gdy połączymy za pomocą zipa więcej obiektów to dict nie zadziała.
![Page 50: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/50.jpg)
Zadanie 8 – rozwiązanie 6>>> dzieci_i_prezenty = {}
>>> for dziecko in dzieci:
dzieci_i_prezenty[dziecko] = prezenty[dzieci.index(dziecko)]
>>> print(dzieci_i_prezenty)
Jako ciekawostka z użyciem metody index.
W krokach wyglądałoby to tak:
For dziecko in dzieci:index = dzieci.index(dziecko)]dzieci_i_prezenty[dziecko] = prezenty[index]
![Page 51: PyTraning 2.0 #5: Ssssssssss jak słowniki.](https://reader033.fdocuments.net/reader033/viewer/2022051706/58e832671a28ab1c5c8b5933/html5/thumbnails/51.jpg)