Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie w językach skryptowych
Wykład 5: Słowniki Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka 1
2
Operatory i metody słownikowe
Operator Opis d[key] Zwraca wartość związaną z kluczem key ze słownika d d[key] = value Ustawia wartość d[key] równą value del d[key] Usuwa wartość d[key] ze słownika d len(d) Zwraca liczbę pozycji w słowniku d d.clear() Usuwa wszystkie pozycje ze słownika d d.copy() Zwraca płytką kopię słownika d d.qet(key[,default_value']) Zwraca d[key], jeśli istnieje klucz key (w przeciwnym wypadku zwraca wartość domyślną default_yalue) d.has_key(key) Zwraca prawdę, jeśli key występuje w d (w przeciwnym wypadku zwraca fałsz) d.items() Zwraca listę wszystkich pozycji słownika d d.keys() Zwraca listę wszystkich kluczy słownika d d.popitem() Zwraca i usuwa przypadkową pozycję ze słownika d d.setdefault(key[,default_value]) Zwraca d[key], jeśli istnieje klucz key (w przeciwnym wypadku ustawia i zwraca wartość domyślną default_value) d1.update(d2) Dołącza pozycje ze słownika d2 do słownika d1
3
Tworzenie słownika Słownik (nazywany także odwzorowaniem lub tablicą asocjacyjną) zawiera zero lub więcej par klucz-wartość, które są oddzielone przecinkami i ujęte w nawiasy klamrowe. Klucz jest oddzielany od związanej z nim wartości za pomocą dwukropka (:). Klucz musi być obiektem niezmiennym (liczbą, łańcuchem lub krotką), zaś wartość może być obiektem dowolnego typu (w tym także innym słownikiem). Pusty słownik nie zawiera żadnych pozycji: {}.
4
Tworzenie słownika Przykład
>>> killed = { "Boba Fett": "Sarlacc", "Darth Maul": "Obi-Wan Kenobi", "Darth Vader": "Emperor Palpatine", "Death Star crew": "Luke Skywalker", "Emperor Palpatine": "Darth Vader", "Jabba the Hutt": "Leia Organa", "Obi-Wan Kenobi": "Darth Vader", "Porkins": "Death Star crew", "Qui-Gon Jinn": "Darth Maul", "Yoda": "Natural causes" } >>> nums= { "zlozone": [4, 6, 8, 9, 10], "fibonacci": [1, 1, 2, 3, 5, 8] "pierwsze": [2, 3, 5, 7] "kwadraty": [1, 4, 9] "potrójne": [1, 3, 6, 10] } >>> mydicts = { id(killed): killed, id(nums): nums }
5
Słowniki - uwagi W przypadku kluczy ważna jest wielkość liter.
Klucze znajdujące się wewnątrz słownika muszą być unikatowe. Jeżeli do słownika zostanie wstawiona pozycja z duplikatem klucza, to odpowiednia pozycja z takim kluczem, która istnieje w słowniku, zostanie przez nią zastąpiona. Klucze danego słownika mogą być mieszaniną liczb, łańcuchów i krotek. Krotka może być kluczem tylko wtedy, gdy zawiera niezmienne obiekty (liczby, łańcuchy lub krotki). Jeśli krotka jawnie lub niejawnie zawiera obiekt zmienny (na przykład listę), to Python nie zezwoli na jej użycie jako klucza i zgłosi wyjątek TypeError. Krotki mogą zawierać klucze złożone, które składają się z kilku wartości. Krotka dwupozycyjna może na przykład przechowywać długość i szerokość geograficzną lub indeks wiersza i kolumny tablicy. >>> english = { "jeden": "one", 2.0: "two", (3,): "three", 8/2: "four" } >>> english { 'jeden': 'one', 2.0: 'two', (3,): 'three', 8/2: 'four' }
6
Drukowanie słownika >>> print killed
{'Qui-Gon Jinn': 'OarthMaul', 'Oarth Evader': 'Emperor Palpatine', 'Yoda': 'Natural causes', 'Obi-Wan Kenobi': 'Darth Vader', 'Death Star crew': 'Luke Skywalker', 'Porkins': 'Death Star crew', 'Boba Fett': 'Sarlacc'. 'Emperor Palpatine': 'Darth Vader', 'Jabba the Hutt': 'Leia Organa'. 'OarthMaul': 'Obi-wan Kenobi'} >>> print nums {'fibonacci': [1, 1, 2, 3, 5, 8], 'pierwsze': [2, 3, 5, 7], 'złozone': [4, 6, 8, 9, 10], 'kwadraty': [1, 4, 9], 'potrojne': [1, 3, 6, 10]}
7
Własna funkcja drukowania słownika
def printdict(dict): keys = diet.keys() keys.sort() for key in keys: print key, ":", dict[key]
8
printdict w akcji >>> printdict(killed) Boba Fett : Sarlacc
Darth Maul : Obi-Wan Kenobi Darth Vader : Emperor Palpatine Death Star crew : Luke Skywalker Emperor Palpatine : Darth Vader Jabba the Hutt : Leia Organa Obi-Wan Kenobi : Darth Vader Porkins : Death Star crew Qui-Gon Jinn : Darth Maul Yoda : Natural causes >>> printdict(nums) fibonacci : [1, 1, 2, 3, 5, 8] kwadraty : [ ] pierwsze : [2, 3, 5, 7] potrojne : [1, 3, 6, 10] zlozone : [4, 6, 8, 9, 10]
9
Uzyskanie wartości za pomocą klucza
>>> killed["Yoda"] 'natural causes' >>> a = nums["pierwsze"] >>> print a[0:2] [2, 3] >>> b = mydicts[id(nums)] >>> printdict(b) fiboacci : [1, 1, 2, 3, 5, 8] kwadraty : [1, 4, 9] pierwsze : [2, 3, 5, 7] potrojne : [1, 3, 6, 10] zlozone : [4, 6, 8, 9, 10] >>>killed["Boss Hogg"] Traceback (most recent call last): File "<stdin>". line 1, in ? KeyError: Boss Hogg
10
Uzyskiwanie wartości za pomocą klucza (lub wartości domyślnej w przypadku, gdy klucz nie istnieje)
>>>a = nums.get("pierwsze") >>>print a [2, 3, 5, 7] >>> b = nums.get("pierwsze", []) >>> print b >>> c = nums.get("parzyste", [2, 4, 6, 8, 10]) >>> print c [2, 4, 6, 8, 10] >>> d = nums.get("parzyste") >>> print d None >>>killed.get("Anakin Skywalker", "") '' >>> killed [killed. get("Anakin Skywalker", "Darth Vader")] 'Emperor Palpatine' >>> {}.get("mimetyczny","")
11
Uzyskiwanie wartości za pomocą klucza (lub uzyskiwanie wartości i wstawianie wartości domyślnej w przypadku, gdy klucz nie istnieje) >>> c = nums.setdefault("parzyste",[2, 4, 6, 8, 10]) >>> d = nums.setdefault("urojone") >>> e = nums.setdefault ("pierwsze", []) >>> print c [2, 4, 6, 8, 10] >>> print d None >>> print e [2, 3, 5, 7] >>> printdict(nums) fibonacci : [1, 1, 2, 3, 5. 8] kwadraty : [1. 4, 9] parzyste : [2. 4, 6, 8. 10] pierwsze : [2, 3, 5, 7] potrojne : [1, ] urojone : None zlozone : [4, 6, 8, 9, 10] >>> z = {} >>> z.setdefault("mimetyczny", "") >>> z {'mimetyczny': ''} >>> a = killed.setdefault ("Radio star", "Video") >>> b = killed.get("Anakin Skywalker", "Darth Vader") >>> print a Video >>> print b Darth Vader >>> printdict(killed) Boba Fett : Sarlacc Darth Maul : Obi-Wan Kenobi Darth Vader : Emperor Palpatine Death Star crew : Luke Skywalker Emperor Palpatine : Darth Vader Jabba the Hutt : Leia Organa Obi-Wan Kenobi : Darth Vader Porkins : Death Star crew Qui-Gon Jinn : Darth Maul Radio star : Video Yoda : Natural causes
12
Uzyskiwanie wszystkich wartości ze słownika
>>> a = killed.values() >>> print a ['OarthMaul', 'Emperor Palpatine', 'Natural causes', 'Darth Vader', 'Luke Skywalker', 'Death Star crew', 'Sarlacc', 'Darth Vader', 'Leia Organa', 'Obi-Wan Kenobi'] >>> nums.values() [[1, 1, 2, 3, 5, 8], [2, 3, 5, 7], [4, 6, 8, 9, 10], [ 1, 4, 9], [1, 3, 6, 10]] >>> mydicts.values() [{'fibonacci': [1, 1, 2, 3, 5, 8], pierwsze' : [2, 3, 5, 7], 'zlozone': [4, 6, 8, 9, 10], 'kwadraty': [1, 4, 9], 'potrojne': [1, 3, 6, 10]}, {'Qui-Gon Jinn': 'Darth Maul', 'Darth Vader': 'Emperor Palpatine', 'Yoda': 'Natural causes', 'Obi-Wan Kenobi': 'Darth Vader'. 'Death Star crew': 'Luke Skywalker', 'Porkins': 'Death Star crew', 'Boba Fett': 'Sarlacc', 'Emperor Palpatine': 'Darth Vader', 'Jabba the Hutt': 'Leia Organa', 'Darth Maul': 'Obi-Wan Kenobi'}] >>> print mydicts[id(nums)].values() [[1, 1, 2, 3, 5, 8], [2, 3, 5, 7], [4, 6, 8, 9, 10], [1, 4, 9], [1, 3, 6, 10]] >>> {}.values() []
13
Uzyskiwanie wszystkich kluczy ze słownika
>>> a = killed.keys() >>> print a ['Qui-Gon Jinn', 'Darth Vader ', 'Yoda'. 'Obi-Wan Kenobi'. 'Death Star crew', 'Porkins', 'BobaFett', 'Emperor Palpatine', ' Jabba the Hutt', 'Darth Maul'] >>> nums.keys( ) ['fibonacci', 'pierwsze', 'zìozone', 'kwadraty', 'potrojne'] >>> mydicts.keys() [ , ] >>> print mydicts[id(nums)].keys() ['fibonacci', 'pierwsze', 'zlozone', 'kwadraty', 'potrojne'] >>> (}.keys() []
14
Uzyskiwanie wszystkich par klucz-wartość ze słownika
>>> a = killed.items() >>> print a [('Qui-Gon Jinn', 'Darth Maul'), ('Darth Vader', 'Emperor Palpatine'), ('Yoda', 'Natural causes'), ('Obi-Wan Kenobi', 'Darth Vader'), ('Death Star crew', 'Luke Skywalker'), ('Porkins', 'Death Star crew'), ('Boba Fett', 'Sarlacc'), ('Emperor Palpatine', 'Darth Vader'), ('Jabba the Hutt', 'Leia Organa'), ('Darth Maul', 'Obi-Wan Kenobi')] >>> nums.iterns() [('fibonacci', [1, 1, 2, 3, 5, 8]), ('pierwsze', [2, 3, 5, 7]), ('zlozone', [2, 4, 6, 8, 9, 10]), ('kwadraty', [1. 4, 9]), ('potrojne', [1, 3, 6, 10])] >>> mydicts.items() [( , {'fibonacci': [1, 1, 2, 3, 5, 8], 'pierwsze': [2, 3, 5, 7], 'złożone': [2, 4, 6, 8, 9, 10], 'kwadraty': [1, 4, 9], 'potrojne': [1. 3, 6, 10]}), ( , {'Qui-Gon Jinn': 'Darth Maul', 'Darth Vader': 'Emperor Palpatine'. 'Yoda': 'Natural causes', 'Obi-Wan Kenobi': 'Darth Vader', 'Death Star crew': 'Luke Skywalker', 'Porkins': 'Death Star crew', 'Boba Fett': 'Sarlacc', 'Emperor Palpatine': 'Darth Vader', 'Jabba the 'Wutt': 'Leia Organa', 'Darth Maul': ' "Obi-Wan Kenobi'})] >>> print mydicts[id(nums)].items() [('fibonacci', [1, 1, 2, 3, 5, 8]), 'pierwsze', [2, 3, 5, 7]), ('zlozone', [2, 4, 6, 8, 9, 10]), ('kwadraty', [1, 4, 9]), 'potrojne' [ 1, 3, 6, 10])] >>> {}. items() []
15
Sprawdzanie tego, czy klucz istnieje
>>> nums.has_key("parzyste") >>> nums.has_key("pierwsze") 1 >>> {}.has_key("") >>> killed.haskey("Boss Hogg") >>> def report(victim): ... if killed.haskey(victim): … print killed[victim], "killed", victim else: print victim, "is not dead" >>> report("Han Solo") Han Solo is not dead >>> report("Darth Maul") Obi-Wan Kenobi killed Darth Maul
16
Zliczanie par klucz-wartość w słowniku
>>> len({}) >>> len(killed) 10 >>> len (nums) 5 >>> len(mydicts) 2 >>> len(mydicts[id(killed)]) >>> len(mydicts[id(nums)])
17
Wstawianie lub zastępowanie pary klucz-wartość
>>> nums["parzyste"] = [2, 4, 6, 8, 10] >>> nums["pierwsze"] = [] >>> nums["kwadraty"].append(16) >>> printdict(nums) fibonacci : [1, 1, 2, 3, 5, 8] kwadraty : [1, 4, 9, 16] parzyste : [2, 4, 6, 8, 10] pierwsze : [] potrójne : [1, 3, 6, 10] złożone : [4, 6, 8, 9, 10] >>> killed["Greedo"] = "Han Solo" >>> killed["Boba Fett"] = "Han Solo" >>> printdict(killed) Boba Fett : Han Solo Darth Maul : Obi-Wan Kenobi Darth Vader : Emperor Palpatine Death Star crew : Luke Skywalker Emperor Palpatine : Darth Vader Greedo : Han Solo Jabba the Hutt : Leia Organa Obi-Wan Kenobi : Darth Vader Pork ins : Death Star crew Qui-Gon Jinn : Darth Maul Yoda : Natural causes >>> mydicts[id(killed)] = None >>> printdict(mydicts) : None : {'zlozone': [4, 6, 8, 9, 10], 'pierwsze': [], 'parzyste': [2, 4, 6, 8, 10], 'kwadraty': [1, 4, 9, 16], 'potrojne': [1, 3, 6, 10], 'fibonacci':[1, 1, 2, 3, 5, 8]
18
Usuwanie pary klucz-wartość
>>> del nums["pierwsze"] >>> printdict(nums) fibonacci : [1, 1, 2, 3, 5, 8] kwadraty : [1, 4, 9] potrójne : [1, 3, 6, 10] zlozone : [4, 6, 8, 9, 10] >>> del mydicts[id(nums)]["kwadraty"] >>> printdict(mydicts[id(nums)]) potrojne : [1, 3. 6, 10] >>> del mydicts[id(nums)], mydicts[id(killed)] >>> print mydicts {} >>> del killed["Boss Hogg"] Traceback (most recent call last): File "<stdin>", line 1, in ? KeyError: Boss Hogg >>> del nums["fibonacci"], killed["Yoda"] >>> printdict(nums) potrojne : [1, 3, 6, 10] zlozone : [4, 6, 8, 9, 10] >>> kiled.keys() ['Qui-Gon Jinn', 'Darth Vader', 'Obi-Wan Kenobi', 'Death Star crew', 'Porkins', 'Boba Fett', 'Emperor Palpatine', 'Jabba the Hutt', 'Darth Maul']
19
Usuwanie przypadkowej pary klucz-wartość
>>> {}.popitem() Traceback (most recent call last): File "<stdin>", 1ine 1, in ? KeyError. popitem(): dictionary is empty >>> a = killed. popitem() >>> print a ('Qui-Gon Jinn', 'Darth Maul') >>> killed.popitem() ('Darth Vader', 'Emperor Palpatine') ('Yoda', 'Natural causes') >>> print killed.keys() ['Obi-Wan Kenobi', 'Death Star crew', 'Porkins', 'Boba Fett', 'Emperor Palpatine'. 'Jabba the Hutt', 'Darth Maul'] >>> b = mydicts[id(nums)].popitem() >>> print b ('fibonacci', [1. 1, 2, 3, 5, 8]) >>> printdict(nums) kwadraty : [1, 4, 9] pierwsze : [2, 3, 5, 7] potrójne : [1, 3, 6, 10] zlozone : [4, 6, 8, 9, 10] >>> while nums: ... print nums.popitem()[0].capitalize() Pierwsze Zlozone Kwadraty Potrojne >>> print nums {}
20
Oczyszczanie lub usuwanie słownika
>>> z.clear() >>> print z {} >>> mydicts.clear() >>> print mydicts >>> printdict(nums) "fibonacci : [1, 1, 2, 3, 5, 8] kwadraty : [1, 4, 9] pierwsze : [2, 3, 5, 7] potrojne : [1, 3, 6, 10] zlozone : [4, 6, 8, 9, 10] >>> nums.clear() >>> print nums >>> del killed >>> print killed Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'killed' is not defined
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.