.. _rjecnik: Rječnik (*Dictionary*) ======================== *Dictionary* (rječnik) je tip podataka sličan polju, samo što index nije isključivo cjeli broj nego bilo koji *immutable* tip podataka kao što su *string*\ ovi ili brojevi. To znači da su dopušteni izrazi ``a['rezultat'] = a['prvi pribrojnik'] + a['drugi pribrojnik']`` ili ``a['rezultat'] = a[('pribrojnik',1)] + a[('pribrojnik',2)]``, za razliku od polja gdje je elementima moguće pristupiti samo pomoću brojčanog indeksa: ``a[2] = a[0] + a[1]``. Kreiranje ------------- .. tabularcolumns:: p{ 2.2572893316728933in } p{ 2.2572893316728933in } p{ 2.2572893316728933in } .. list-table:: :header-rows: 0 * - .. literalinclude:: dict01.py :language: python .. literalinclude:: dict01.py.filtered :language: text - .. literalinclude:: dict02.py :language: python .. literalinclude:: dict02.py.filtered :language: text - .. literalinclude:: dict03.py :language: python .. literalinclude:: dict03.py.filtered :language: text Očitavanje i mijenjanje -------------------------- .. tabularcolumns:: p{ 2.2572893316728933in } p{ 2.2572893316728933in } p{ 2.2572893316728933in } .. list-table:: :header-rows: 0 * - .. literalinclude:: dict04.py.filtered :language: pycon - .. literalinclude:: dict05.py :language: python .. literalinclude:: dict05.py.filtered :language: text - .. literalinclude:: dict07.py :language: python .. literalinclude:: dict07.py.filtered :language: text Primjer: brojanje ponavljanja riječi u listi ---------------------------------------------------- .. literalinclude:: dict06.py :language: python .. literalinclude:: dict06.py.filtered :language: text U gornjem primjeru smo pazili da ne pokušamo očitati vrijednost ``brojac[i]`` ako ključ ``i`` već nije u rječniku ``brojac``. Da bi se ta provjera izbjegla, moguće je zadati default vrijednosti nekom rječniku koristeći funkciju :meth:`dict.setdefault` ili klasu :class:`collections.defaultdict`: .. literalinclude:: dict08.py :language: python .. literalinclude:: dict08.py.filtered :language: text Brojanje riječi se, prema tome, može riješiti i ovako: .. literalinclude:: dict10.py :language: python .. literalinclude:: dict10.py.filtered :language: text Dodatni primjeri na https://docs.python.org/3/library/collections.html#defaultdict-examples.