Odnośniki do słów są korzystną metodą przechowywania informacji w celu ich późniejszego odzyskania po nazwie (kluczu). Klucze muszą być jedynymi w swoim rodzaju, niezmiennymi artykułami i są zwykłymi sznurkami. Cechy w referencji słownej mogą być dowolne. Dla niektórych zastosowań są to właściwości proste, na przykład liczby całkowite i ciągi znaków.

Tym bardziej fascynujące jest to, że cechy w odniesieniu do słów są nagromadzone (rekordy, dyktanda, itd.) W tej sytuacji należy wprowadzić wartość (puste polecenie lub dyktando) przy pierwszym uruchomieniu danego klucza. O ile jest to na ogół proste do wykonania fizycznie, o tyle typ defaultdict mechanizuje i usprawnia tego typu zadania.

Defaultdict działa dokładnie tak, jak typowy dyktafon, ale jest wyposażony w pojemność (“domyślna instalacja przetwarzania”), która nie zawiera żadnych sporów i zachęca do nieistniejącego klucza.

Zadanie defaultdict nigdy nie podniesie KeyError. Każdy klucz, który nie istnieje, otrzymuje wartość zwróconą przez domyślny zakład produkcyjny.

>>> z kolekcji importuje defaultdict defaultdict

>>> ice_cream = defaultdict(lambda: “waniliowy”)

>>>

>>> ice_cream = defaultdict(lambda: “waniliowy”)

>>> ice_cream[‘Sarah’] = “Chunky Monkey

>>> ice_cream[“Abdul”] = “Butter Pecan

>>> print ice_cream[‘Sarah’]

Duża Małpa

>>> print ice_cream[“Joe”]

Wanilia

>>>

Upewnij się, że przepustowość została przekazana do defaultdict(). Staraj się nie wywoływać pojemności, na przykład defaultdict(func), a nie defaultd.ict(func()).

W towarzyszącym mu modelu, defaultdict jest używane do tallyingu. Domyślnym zakładem produkcyjnym jest int, który w związku z tym posiada domyślne oszacowanie na poziomie zera. (Uwaga: “lambda: 0” w tej sytuacji również by działał). Dla każdego pożywienia w rozkroku, wartość jest zwiększana o jeden, gdzie kluczem jest pożywienie. Nie musimy mieć pewności, że pokarm jest od tej pory kluczem – będzie on wykorzystywał domyślne oszacowanie zera.

>> from collections import defaultdict

>>> food_list = “spam spam spam spam spam jaja spam”.split()

>>> food_count = defaultdict(int) # default value of int is 0

>>> dla jedzenia w food_list:

… food_count[food] += 1 # wartość elementu inkrementalnego o 1

defaultdict(<type ‘int’>, {“eggs”: 1, ‘spam”: 7})

>>>

W następnym przykładzie zaczynamy od listy państw i miast. Chcemy zbudować słownik, w którym kluczami są skróty państwowe, a wartościami są listy wszystkich miast dla tego stanu. Aby zbudować słownik list, używamy defaultdict z domyślną fabryką list. Dla każdego nowego klucza tworzona jest nowa lista.

>>> z kolekcji importujemy defaultdict

>>> city_list = [(“TX”, “Austin”), (“TX”, “Houston”), (“NY”, “Albany”), (“NY”, “Syracuse”), (“NY”, “Buffalo”), (“NY”, “Rochester”), (“TX”, “Dallas”), (“CA”, “Sacramento”), (“CA”, “Palo Alto”), (“GA”, “Atlanta”)]

>>>

>>> cities_by_state = defaultdict(lista)

>>> dla stanu, miasto w city_list:

… city_by_state[state].append(city)

dla stanu, miasta w city_by_state.iteritems():

…print state, ‘, ‘.join(cities)

NY Albany, Syracuse, Buffalo, Rochester

CA Sacramento, Palo Alto

GA Atlanta

TX Austin, Houston, Dallas