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

PL
Data dodania: 2011-09-17, Autor: slyher, Dodał: Karol, Wyświetleń: 342

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!


Kontakt

Jeśli chcesz się z nami skontaktować napisz na adres: info(at)binboy.org lub odwiedź nasz profil na Facebooku!

O Nas

Serwis binboy.org to kopalnia wiedzy dla wszystkich z branży IT, w szczególności dla programistów i webmasterów. To duży zbiór kursów programowania, tutoriali, darmowych ebooków, setki kodów źródłowych itp.

Bądź w kontakcie

Panel użytkownika

Zaloguj się do panelu użytkownika.
Nie masz konta? Zarejestruj się!
Zapomniałeś hasła?