Diccionaris =========== Conceptes ~~~~~~~~~ - :term:`tipus` diccionari (:class:`dict`): :term:`clau`, valor associat - :term:`valor literal` de tipus :class:`dict`, diccionari buit - :term:`funció` de conversió: :class:`dict` - operacions de consulta d'un diccionari: * :term:`funcions predefinides `: :func:`len`, :func:`max`, :func:`min` * accés per clau (``[]``), :term:`mètode` :meth:`~dict.get` * operador de pertinença: ``in``, ``not in`` * mètodes (vistes) :meth:`~dict.keys`, :meth:`~dict.values` i :meth:`~dict.items` - :term:`operador relacional`: ``==, !=`` - diccionari com a :term:`objecte` :term:`mutable` - operacions de modificació d'un diccionari: * inserció del valor associat a una clau * modificació del valor associat a una clau - :term:`iteració` de diccionaris, :term:`sentència` :keyword:`for` - :term:`diccionari per comprensió` - :term:`algorisme` de diccionaris: :term:`esquemes ` de :term:`recorregut ` i :term:`cerca ` per clau - :term:`còpia d'un objecte`: còpia superficial i còpia profunda - mètode :meth:`~dict.copy` Exemples ~~~~~~~~ .. code-block:: python3 :caption: Valors literals de tipus :class:`dict`. {} # diccionari buit {'a': 1, 'b': 5} {'a': [1, 3, 5], 'b': [22, 35]} {('a', 1): 3, ('b', 2): 34} .. code-block:: pycon :caption: Funcions de conversió >>> d = dict([('a', 1), ('b', 2)]) >>> d {'a': 1, 'b': 2} .. code-block:: pycon :caption: Funcions predefinides >>> d = {'a': [1, 3, 5], 'b': [22, 35]} >>> len(d) # nombre de claus 2 >>> max(d) # màxim de les claus 'b' >>> min(d) # mínim de les claus 'a' .. code-block:: pycon :caption: Accés per clau >>> d = {'A': 10, 'B': 35, 'C': 23} >>> d['C'] 23 .. code-block:: pycon :caption: Mètode :meth:`~dict.get` >>> edats = {"Anna": 25, "Joan": 30, "Maria": 22} >>> edats.get("Anna") 25 >>> edats.get("Pere") # Retorna None >>> edats.get("Pere", 0) # Retorna 0 si no troba la clau 0 .. code-block:: pycon :caption: Operadors de pertinença >>> 'A' in d True >>> 10 in d False >>> 10 not in d True .. code-block:: pycon :caption: Mètodes (vistes) :meth:`~dict.keys`, :meth:`~dict.values` i :meth:`~dict.items` >>> d = {'a': 1, 'b': 2, 'c':3} >>> d.keys() # vista de les claus del dicc. dict_keys(['a', 'b', 'c']) >>> d.values() # vista dels valors del dicc. dict_values([1, 2, 3]) >>> d.items() # vista de parelles (clau, valor) del dicc. dict_items([('a', 1), ('b', 2), ('c', 3)]) .. code-block:: pycon :caption: Operadors relacionals: ``==`` i ``!=`` >>> d = {'A': 10, 'B': 35} >>> d == {'B': 35, 'A': 10} # tenen les mateixes parelles clau-valor True >>> d != {'A': 4, 'B': 35} True .. code-block:: pycon :caption: Inserció i modificació del valor associat a una clau >>> d = {'A': 10, 'B': 35, 'C': 23} >>> d['D'] = 74 # inserció >>> d {'A': 10, 'B': 35, 'C': 23, 'D': 74} >>> d['B'] = 89 # modificació >>> d {'A': 10, 'B': 89, 'C': 23, 'D': 74} >>> d['B'] = d['B'] + 1 >>> d['B'] 90 >>> d2 = {'353': [10, 30, 35], '532': [32]} >>> d2['532'].append(50) >>> d2 {'353': [10, 30, 35], '532': [32, 50]} .. code-block:: pycon :caption: Iteracions de dicccionari amb ``for`` >>> dicc = {'A': 10,'E': 53,'I': 5} >>> for clau in dicc: ... print(clau,dicc[clau]) A 10 E 53 I 5 .. code-block:: pycon :caption: Diccionari per comprensió >>> numeros = [1, 2, 3, 4, 5] >>> quadrats = {n: n**2 for n in numeros} >>> quadrats {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} >>> parells = {n: n**2 for n in numeros if n % 2 == 0} >>> parells {2: 4, 4: 16} .. code-block:: pycon :caption: Còpia de diccionaris. >>> d3 = {'353': [10, 30, 35], '532': [32]} >>> d3nou = d3.copy() # còpia superficial de diccionaris >>> d3nou {'353': [10, 30, 35], '532': [32]} >>> d3nou is d3 False Exercicis del tema ~~~~~~~~~~~~~~~~~~ .. toctree:: :glob: :maxdepth: 1 */index Referències ~~~~~~~~~~~ - Capítol :doc:`toni:diccionaris/index` de :doc:`toni:index` .. - Capítol 11 del llibre `Introducció a la programació `__ - Capítol :doc:`howto:conditionals` del llibre :doc:`howto:index` - Capítol :ref:`tut-dictionaries` de :ref:`tutorial-index`. - Capítol :ref:`typesmapping` de :ref:`library-index`.