1 / 20

Programowanie w językach skryptowych

Programowanie w językach skryptowych. Wykład 5:. Słowniki. Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka. 1. Operatory i metody słownikowe. Operator Opis d[key] Zwraca wartość związaną z kluczem key ze słownika d

brody
Download Presentation

Programowanie w językach skryptowych

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 OperatorOpis 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łowniknie 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 : [1. 4. 9] 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 [2, 3, 5, 7] >>> 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, 3. 6. 10] 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-GonJinn': '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() [7924892, 7923932] >>> 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() [(7924892, {'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]}), (7923932, {'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") 0 >>> nums.has_key("pierwsze") 1 >>> {}.has_key("") 0 >>> killed.haskey("Boss Hogg") 0 >>> 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({}) 0 >>> len(killed) 10 >>> len (nums) 5 >>> len(mydicts) 2 >>> len(mydicts[id(killed)]) 10 >>> len(mydicts[id(nums)]) 5

  17. Wstawianie lub zastępowanie pary klucz-wartość >>> 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) 7923932 : None 7924892 : {'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] >>> 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]

  18. Usuwanie pary klucz-wartość >>> 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-WanKenobi', 'Death Star crew', 'Porkins', 'Boba Fett', 'Emperor Palpatine', 'Jabba the Hutt', 'Darth Maul'] >>> 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)]) fibonacci : [1, 1, 2, 3, 5, 8] potrojne : [1, 3. 6, 10] zlozone : [4, 6, 8, 9, 10] >>> del mydicts[id(nums)], mydicts[id(killed)] >>> print mydicts {}

  19. Usuwanie przypadkowej pary klucz-wartość >>> 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 {} >>> {}.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') >>> killed.popitem() ('Yoda', 'Natural causes') >>> print killed.keys() ['Obi-Wan Kenobi', 'Death Star crew', 'Porkins', 'Boba Fett', 'Emperor Palpatine'. 'Jabba the Hutt', 'Darth Maul']

  20. Oczyszczanie lub usuwanie słownika >>> del killed >>> print killed Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'killed' is not defined >>> z = {} >>> 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 {}

More Related