2.2.7 Typy odwzorowujące

 

Obiekt odwzorowujący odwzorowuje wartości niemutowalne na dowolne obiekty. Odwzorowania są obiektami mutowalnymi. Obecnie istnieje tylko jeden standardowy typ odwzorowujący, a mianowicie słownik. Kluczami w słowniku mogą być niemal dowolne wartości. Jedynymi typami wartości niedopuszczalnymi jako klucze są listy lub słowniki (które są porównywane na podstawie wartości a nie adresu obiektu). Typy liczbowe używane jako klucze zachowują podstawowe zasady porównywania liczbowego: jeśli dwie liczby są równe (n.p. 1 i 1.0) mogą zamiennie służyć jako indeks tej samej pozycji w słowniku.

Słowniki są tworzone przez umieszczenie par klucz: wartość oddzielonych przecinkami wewnątrz nawiasów klamrowych, na przykład: {'jacek': 4098, 'placek': 4127} lub {4098: 'jacek', 4127: 'placek'}.

Dla odwzorowań zostały zdefiniowane następujące operacje (gdzie a i b są odwzorowaniami, k jest kluczem a v i x są dowolnymi obiektami):   

Operacja  Wynik  Uwagi 
len(a) ilość elementów w a  
a[k] element a odp. kluczowi k (1)
a[k] = v przypisanie a[k] wartości v  
del a[k] usunięcie a[k] z a (1)
a.clear() usunięcie wszystkich elementów z a  
a.copy() (płytka) kopia a  
a.has_key(k) 1 jeśli a posiada klucz k, w przeciwnym wypadku 0  
k in a Równoważne zapisowi a.has_key(k) (2)
k not in a Równoważne zapisowi not a.has_key(k) (2)
a.items() elementy z a w postaci listy par (klucz, wartość) (2)
a.keys() kopia listy kluczy z a (3)
a.update(b) for k in b.keys(): a[k] = b[k] (3)
a.fromkeys(seq[, value]) Tworzy nowy słownik o kluczach pobranych z sekwencji seq i wartościach z value (7)
a.values() kopia listy wartości z a (3)
a.get(k[, x]) jeśli k in a to a[k], w przeciwnym przypadku x (4)
a.setdefault(k[, x]) jeśli k in a to a[k], w przeciwnym przypadku x (zapisując w a brakującą wartość) (5)
a.pop(k) usunięcie elementu o indeksie k zwracając wartość a[k]  
a.popitem() usuniecie i zwrócenie przypadkowej pary (klucz, wartość) (6)
a.iteritems() zwraca iterator operujący na parach (klucz, wartość) (2), (3)
a.iterkeys() zwraca iterator operujący na kluczach odwzorowań (2), (3)
a.iteritems() zwraca iterator operujący na wartościach odwzorowań (2), (3)

Uwagi:

(1)
Wywołuje wyjątek KeyError jeśli k nie występuje w odwzorowaniu.

(2)
Dodano w wersji 2.2.

(3)
Klucze i wartości są listowane w przypadkowej kolejności. Jeśli jednak metody items(), keys(), values(), iteritems, iterkeys lub itervalues są wywołane bez modyfikacji słownika w międzyczasie, uzyskane listy kluczy i wartości będą miały ustaloną kolejność. Dzięki temu można utworzyć pary (klucz, wartość) za pomocą funkcji zip() w następujący sposób: "(pary = zip(a.values(), a.keys())". Podobna zależność istnieje pomiędzy metodami itervalues() oraz iterkeys(): "(pary = zip(a.itervalues(), a.iterkeys())" dadzą ten sam wartość zmiennej pary co powyższy przykład. Jeszcze innym sposobem uzyskania par (klucz, wartość) jest wykonanie następującego kodu: "pary = [(v, k) for (k, v) in a.iteritems()]"

(4)
Nie wywołuje wyjątku jeśli k nie występuje w odwzorowaniu, natomiast zwraca x. x jest opcjonalne, jeśli x nie jest podane i k nie występuje w odwzorowaniu, zwracane jest None.

(5)
Metoda setdefault() działa jak get(), z tą różnicą, że jeśli k nie występuje w odwzorowaniu, zwracane jest x i jednocześnie zostaje wstawione do słownika jako wartość klucza k.

(6)
Metoda popitem() jest użyteczna dla iteracji po słowniku z usuwaniem elementów, tak jak to jest zwykle używane w algorytmach obsługujących zbiory (sets).

(7)
Metoda fromkeys() jest metodą fabrykującą zwracającą nowy słownik. Parametr value domyślnie przyjmuje wartość None. Dodano w wersji 2.3.

Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.