Riferimenti: SoftPython - dizionari 3
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
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
Ritorna una *vista* sul dizionario originale
orto = {'carote' : 5,
'pomodori': 8,
'cavoli' : 3}
vista_chiavi = orto.keys()
vista_chiavi
dict_keys(['carote', 'pomodori', 'cavoli'])
se la collezione originale viene modificata, si modifica contemporaneamente anche la vista:
orto['melanzane'] = 10
vista_chiavi
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
Ritorna una *vista* sul dizionario originale
orto = {'carote' : 5,
'pomodori': 8,
'cavoli' : 3}
vista_valori = orto.values()
vista_valori
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
Ritorna una vista sul dizionario originale
orto = {'carote' : 5,
'pomodori': 8,
'cavoli' : 3}
vista_coppie = orto.items()
vista_coppie
dict_items([('carote', 5), ('pomodori', 8), ('cavoli', 3)])
Un modo corretto (oltre agli operatori) per modificare il dizionario, aggiunge o sovrascrive coppie prese da un altro dizionario
orto = {'carote' : 5,
'pomodori': 8,
'cavoli' : 3}
orto.update( { 'carote': 70,
'melanzane': 20,
})
orto
{'carote': 70, 'pomodori': 8, 'cavoli': 3, 'melanzane': 20}