2. Filtrar les claus d’un diccionari

Dissenya la funció següent i desa-la al mòdul dic_filtres (fitxer dic_filtres.py):

dic_filtres.filtrar_per_llista(dicc, claus)

Filtra les claus de dicc contingudes a la llista claus.

Paràmetres:
  • dicc (dict) – diccionari

  • claus (list) – llista amb un subconjunt de les claus de dicc

Tipus de retorn:

dict

Retorna:

diccionari que només conté les claus de la llista claus i els mateixos valors associats que en dicc

Per exemple:


>>> d = {'a': 4, 'b': 1, 'c': -5, 'd': 3}
>>> l = ['c', 'a']
>>> r = filtrar_per_llista(d, l)
>>> r == {'a': 4, 'c': -5}
True

>>> r = filtrar_per_llista(d, [])
>>> r
{}

>>> r = filtrar_per_llista(d, list(d.keys()))
>>> r == d
True

Disposes de més tests al fitxer test-filtrar_per_llista.txt.

Un diccionari bidimensional és una estructura de dades semblant a una matriu. La diferència és que els índexs de les files i de les columnes són claus en comptes de nombres naturals. Per tant, un diccionari bidimensional té un conjunt de claus per les files i un altre per les columnes. Podem implementar aquesta estructura de dades usant un diccionari de diccionaris, és a dir, un diccionari en què el valor associat a cada clau serà un altre diccionari que correspon a la fila, com en l’exemple següent:

>>> d = {
...   'a': {'x': 0, 'y': 10, 'z': 20},
...   'b': {'x': 1, 'y': 11, 'z': 21},
...   'c': {'x': 2, 'y': 12, 'z': 22},
...   'd': {'x': 3, 'y': 13, 'z': 23},
... }

Al diccionari bidimensional d de l’exemple anterior, el conjunt de claus de les files és {'a', 'b', 'c', 'd'} i el conjunt de claus de les columnes és {'x', 'y', 'z'}. En aquest diccionari bidimensional, el valor associat a la fila 'c' i a la columna y és 12 i s’hi accedeix fent d['c']['y']. Observa que el conjunt de claus de tots els diccionaris de les files és el mateix: el conjunt de claus de les columnes.

Dissenya la funció següent i desa-la també al mòdul dic_filtres (fitxer dic_filtres.py):

dic_filtres.filtrar_bidimensional(dicc, files, cols)

Filtra les claus de les files del diccionari bidimensional dicc contingudes a la llista files i les de les columnes contingudes a la llista cols.

Paràmetres:
  • dicc (dict) – diccionari bidimensional

  • files (list) – llista amb un subconjunt de les claus de les files de dicc

  • cols (list) – llista amb un subconjunt de les claus de les columnes de dicc

Tipus de retorn:

dict

Retorna:

diccionari bidimensional que només conté les claus de les files de files i les claus de les columnes de cols. Els valors són els mateixos que en dicc

Per exemple:


>>> d = {
...   'a': {'x': 0, 'y': 10, 'z': 20},
...   'b': {'x': 1, 'y': 11, 'z': 21},
...   'c': {'x': 2, 'y': 12, 'z': 22},
...   'd': {'x': 3, 'y': 13, 'z': 23},
... }
>>> f = ['c', 'a']
>>> c = ['z']
>>> r = filtrar_bidimensional(d, f, c)
>>> r == {
...   'a': {'z': 20},
...   'c': {'z': 22},
... }
True

>>> f = []
>>> c = ['x', 'z']
>>> r = filtrar_bidimensional(d, f, c)
>>> r
{}

>>> f = ['b', 'd']
>>> c = []
>>> r = filtrar_bidimensional(d, f, c)
>>> r == {
...   'b': {},
...   'd': {},
... }
True

Disposes de més tests al fitxer test-filtrar_bidimensional.txt.

Important

La funció filtrar_bidimensional() ha de cridar a filtrar_per_llista().