Podstawowe informacje o słownikach i troche przykładów

Podstawowe informacje o słownikach i troche przykładów
Wszystkie przykłady zostały sprawdzone na Pythonie 2.4.2
Stringi, listy, krotki (tuples zwane równierz zbiorami) oraz słowniki zaliczają się do typów obiektów zwanych kontenerami i kolekcjami. Jednakże słowniki różnią się od pozostałych znacznie.
Czym jest słownik- słownik jest zmienny (modyfikowalny), nieposortowany zestaw par klucz:wartość. Wartością może być dowolny obiekt Python'owy. Słownik można porównać do tablic asocjacyjnych z innych języków. Według książki "Learning Python" napisanej przez Marka Lutz'a, Davida Ascher'a wewnętrznie są implementowane jako tablice haszujące i dodatkowo optymalizowane, co powoduje bardzo szybkie wydobywanie danych. W przeciwieństwie do stringów, list, krotek słownik nie jest sekwencją gdyż w sekwencji istnieje porządek, słownik nie posiada porządku. Indeksem słownika jest klucz. Kluczem, według Python Tutorial, może być dowolny niezmienny typ. Liczby i stringi są niezmiennymi typami więc mogą stanowić klucz w słowniku. Krotka może stanowić klucz 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. Słownik tworzymu "wkładając" pary klucz:wartość w nawiasy klamrowe, oddzielając je przecinkiem:
Dict={klucz1:wartość1, klucz2:wartoość2, klucz3:wartoość3}
lub stworzyć pusty słownik
Dict={}
do pustego słownika można dodać elementy jak do tablicy:
Dict[index5]=wartość5
Rzeczą oczywistą jest, że klucze muszą być unikatowe. W przeciwnym razie - dodając pare klucz:war gdzie klucz już istnieje w słowniku- zamażemy starą wartość przez war- chyba, że mamy taki zamiar by zmodyfikować starą wartość. Możliwe jest usuwanie elementu ze słownika przez słowo kluczowe del
del Dict[index5]
Słowniki razem z listami i krotkami mają najwyższy priorytet operacji. Aby zobaczyć wszystkie możliwe do wykonannia operacje na słowniku wywołamy:
slownik={}
dir(slownik)
W wyniku dostaniemy:
['clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
W miejscu operacjami wykonywanymi na słowniku pojawiają się atrybuty.
- clear- użycie: Dict.clear() nie zwraca wartości, usuwa wszystkie pary klucz:wartość ze słownika Dict.
- copy- użycie: Dict.copy() zwraca Dict, płytkie kopiowanie słownika.
- fromkeys- użycie: Dict.fromkeys(S[,v])-parametr v jest opcjonalny- tworzy słownik Dict z kluczami z S i wartościami równymi v.
- get- użycie: Dict.get(k[,d])-parametr d jest opcjonalny- zwraca Dict[k] jeśli k jest indeksem w słowniku, w przeciwnym razie zwraca d.
- has_key- użycie: Dict.has_key(klucz1) zwraca prawde jeśli klucz1 należy do słownika Dict, w przeciwnym wypadku zwraca fałsz.
- items- użycie: Dict.items() zwraca liste elementów (klucz, wartość).
- iteritems- użycie: Dict.iteritems() iterator nad elementami słownika Dict.
- iterkeys- użycie: Dict.iterkeys() iterator nad kluczami słownika Dict.
- itervalues- użycie: Dict.itervalues() iterator nad wartościami słownika Dict.
- keys- użycie: Dict.keys() zwraca liste kluczy.
- pop- użycie: Dict.pop(klucz[,blad])- parametr błąd jest opcjonalny- zwraca wartość elementu korespondującego z kluczem i usuwa go ze słownika, jeśli klucza nie ma w słowniku zwraca wartość bład, a jaśli nie została podana "zwraca" błąd- KeyError.
- popitem- użycie: Dict.popitem() zwraca pare (klucz, wartość) i usuwa ze słownika, a jeśli słownik jest pusty "zwraca" błąd- KeyError.
- setdefault- użycie: Dict.setdefault(klucz,bląd)-parametr błąd jest opcjonalny- zwraca wartość elementu korespondującego z kluczem, jeśli klucza nie ma w słowniku zwraca wartość błąd i wstawia do słownika pare klucz:błąd.
- update- użycie: Dict.update(E[,**F]) nie zwraca wartości, aktualizuje Dict parami klucz:wartość ze słowników podanych jako parametry.
- values- użycie: Dict.values() zwraca liste wartości słownika.
Przykład:
#!/usr/bin/env python
# -*- coding: iso-8859-2 -*-
# z pliku wczytujemy dane nazwa email
# i wpisujemy do słownika
def wyslij_do(do,tresc):
print "wysłałeś maila do ",
print do,
print "o treści: ",
print tresc
mail={}
tresc="Python jest super"
infile = file('t.dat', 'r')
# można by wczytywać z bazy danych używając np.: MySQLdb
for line in infile:
line=line.strip('\n').split(' ')
mail[line[0]]=line[1]
print mail.keys()
print len(mail)
for o in mail.itervalues():
wyslij_do(o,tresc)
#Tak mógłby powstać interfejs www do odbierania/wysyłania poczy
Przykład użycia słownika jako kontenera do przechowywania danych programu oraz jego opcji wraz z reakcją na nie. Kod użyczony przez Marcina "KoD" Walkowiaka w celu prezentacji możliwości słownika.
_cmdLineConfig = {
"usage": "%prog {[options] --address=ADDRESS | --config-file=CONFIGFILE}",
"version": "%prog 1.0",
"description": "",
"option_list":
[make_option("--address",action = "store",type = string",dest =
"address",help = "url to web page or site to download")
]
}
Podsumowanie
Słowniki mają bardzo szerokie zatosowanie chociażby od takich jak książka telefoniczna, kalendarz urodzinowy, po wczytywanie z bazy danych i wyświetlanie.
Bibliografia
Aby dodawać komentarze musisz być zalogowany!
