Dizionari 3: metodi¶

Riferimenti: SoftPython - dizionari 3

  • visualizza al meglio in
  • versione stampabile: clicca qua
  • per navigare nelle slide: premere Esc


Summer School Data Science 2023 - Modulo 1 informatica: Moodle

Docente: David Leoni david.leoni@unitn.it

Esercitatore: Luca Bosotti luca.bosotti@studenti.unitn.it

Dizionari - Metodi¶

Metodo Ritorna Descrizione
dict.keys() dict_keys Ritorna una vista di chiavi che sono presenti nel dizionario
dict.values() dict_values Ritorna una vista di valori presenti nel dizionario
dict.items() dict_items Ritorna una vista di coppie (chiave, valore) presenti nel dizionario
d1.update(d2) None MODIFICA il dizionario diz1 con le coppie chiave / valore trovate in diz2

ATTENZIONE: i metodi keys, values e items restituiscono viste immutabili

a) spesso sono causa di fraintendimenti e/o codice inefficiente

b) se ti senti nella necessità di usarli, chiediti sempre: è possibile risolvere il problema usando solo gli operatori?

Riferimenti: SoftPython - dizionari 3

Cosa succede quando...¶

si lascia la gente scrivere quello che vuole dove vuole?¶

Python si difende con le viste¶

-> Guardare ma non toccare¶

Metodo keys¶

Ritorna una *vista* sul dizionario originale

In [2]:
orto = {'carote'  : 5,
        'pomodori': 8,
        'cavoli'  : 3}
vista_chiavi = orto.keys()
vista_chiavi
Out[2]:
dict_keys(['carote', 'pomodori', 'cavoli'])

se la collezione originale viene modificata, si modifica contemporaneamente anche la vista:

In [3]:
orto['melanzane'] = 10
In [4]:
vista_chiavi
Out[4]:
dict_keys(['carote', 'pomodori', 'cavoli', 'melanzane'])

keys(): NON potete modificare la vista! 1/2¶

vista_chiavi.append('rape')    # BOOM
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/tmp/ipykernel_15601/2476177040.py in <module>
----> 1 vista_chiavi.append('rape')

AttributeError: 'dict_keys' object has no attribute 'append'

keys(): NON potete modificare la vista! 2/2¶

vista_chiavi[0] = 'patate'   # BOOM
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_15601/1326991453.py in <module>
----> 1 vista_chiavi[0] = 'patate'

TypeError: 'dict_keys' object does not support item assignment

Metodo values¶

Ritorna una *vista* sul dizionario originale

In [5]:
orto = {'carote'  : 5,
        'pomodori': 8,
        'cavoli'  : 3}

vista_valori = orto.values()
vista_valori
Out[5]:
dict_values([5, 8, 3])

values(): NON potete modificare la vista! 1/2¶

vista_valori.append(20)    # BOOM
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/tmp/ipykernel_15601/1291457683.py in <module>
----> 1 vista_valori.append('rape')    # BOOM

AttributeError: 'dict_values' object has no attribute 'append'

values(): NON potete modificare la vista! 2/2¶

vista_valori[0] = 70   # BOOM
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_15601/1358609847.py in <module>
----> 1 vista_valori[0] = 70   # BOOM

TypeError: 'dict_values' object does not support item assignment

Metodo items¶

Ritorna una vista sul dizionario originale

In [6]:
orto = {'carote'  : 5,
        'pomodori': 8,
        'cavoli'  : 3}

vista_coppie = orto.items()
vista_coppie
Out[6]:
dict_items([('carote', 5), ('pomodori', 8), ('cavoli', 3)])

Metodo update¶

Un modo corretto (oltre agli operatori) per modificare il dizionario, aggiunge o sovrascrive coppie prese da un altro dizionario

In [7]:
orto = {'carote'  : 5,
        'pomodori': 8,
        'cavoli'  : 3}
In [8]:
orto.update( { 'carote': 70,
               'melanzane': 20,
             })
In [9]:
orto
Out[9]:
{'carote': 70, 'pomodori': 8, 'cavoli': 3, 'melanzane': 20}
In [10]: