Dizionari 2: operatori¶

Riferimenti: SoftPython - dizionari 2

  • 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

Operatori¶

Operatore Sintassi Ritorna Descrizione
lunghezza len(dict) int Ritorna il numero di chiavi
lettura dict[chiave] obj Ritorna il valore associato alla chiave
modifica dict[chiave] = valore Aggiunge o modifica il valore associato ad una chiave
rimozione del dict[chiave] Rimuove la coppia chiave/valore
appartenenza chiave in dict bool Ritorna True se chiave è presente nel dizionario
uguaglianza ==,!= bool Controlla se due dizionari sono uguali o differenti

Riferimenti:

  • SoftPython - dizionari 2: operatori

len¶

Conta il numero di associazioni:

In [2]:
len({'a':5,
     'b':9,
     'c':7
})
Out[2]:
3
In [3]:
len({(1, 2)  : ['a','b','c'],
     (4, 5)  : ['d','e','f'],
     (7, 8)  : ['g','h','i'],
     (10,11) : ['e','l','m']
    })
In [4]:
 
Out[4]:
4

Leggere valori¶

Data una chiave, possiamo reperire *velocemente* il valore corrispondente

In [5]:
d = { 'sedia'   : 'un mobile per sedersi',
      'armadio' : 'un mobile a ripiani',     
      'comodino': 'mobiletto da camera'
}
# Per accedere ad un valore, possiamo usare una chiave tra parentesi quadre:
d['comodino']
Out[5]:
'mobiletto da camera'
d['un mobile a ripiani']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/tmp/ipykernel_14605/4214485247.py in <module>
----> 1 d['un mobile a ripiani']

KeyError: 'un mobile a ripiani'

Questione d'ordine 1/2¶

Le chiavi sono immutabili, non hanno ordine e
non vi possono essere duplicati

d[0]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/tmp/ipykernel_9124/1089268471.py in <module>
----> 1 d[0]

KeyError: 0

Questione d'ordine 2/2¶

In [6]:
civici = {
    14 : "Simpson",    
    5 :  "Griffin",
    20 : "South Park"
}
In [7]:
civici[5]
Out[7]:
'Griffin'
civici[1]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/tmp/ipykernel_9124/1089268471.py in <module>
----> 1 d[1]

KeyError: 1

Modificare associazioni¶

In [8]:
d = { 'sedia'   : 'un mobile per sedersi',
      'armadio' : 'un mobile a ripiani',  
}

Possiamo aggiungere un'associazione così:

In [9]:
d['comodino'] = 'mobiletto da camera'
In [10]:
d
Out[10]:
{'sedia': 'un mobile per sedersi',
 'armadio': 'un mobile a ripiani',
 'comodino': 'mobiletto da camera'}

Sovrascrivere associazioni¶

In [11]:
d = { 'sedia'   : 'un mobile per sedersi',
      'armadio' : 'un mobile a ripiani',  
}
In [12]:
d['armadio'] = 'un mobile a ripiani, solitamente due ante'
In [13]:
d
Out[13]:
{'sedia': 'un mobile per sedersi',
 'armadio': 'un mobile a ripiani, solitamente due ante'}

Cancellare associazioni con del¶

In [14]:
d = { 'sedia'   : 'un mobile per sedersi',
      'armadio' : 'un mobile a ripiani',  
}
In [15]:
del d['armadio']
In [16]:
d
Out[16]:
{'sedia': 'un mobile per sedersi'}

del è un operatore

Che chiavi possiamo usare?¶

In [17]:
d = {}
In [18]:
d[54] = 'pippo'
In [19]:
d['83a'] = 'topolino'
In [20]:
d[('via dei Platani', 54)] = 'Paperino'
In [21]:
d
Out[21]:
{54: 'pippo', '83a': 'topolino', ('via dei Platani', 54): 'Paperino'}
d[ {'una', 'qualche', 'galera'} ] = "gambadilegno"
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_3047/3187326270.py in <module>
----> 1 d[ {'una', 'qualche', 'galera'} ] = "gambadilegno"

TypeError: unhashable type: 'set'

Cercare in dizionari¶

ATTENZIONE: in nei dizionari cerca solo nelle chiavi!

In [22]:
ingredienti = { 'farina'   : 500,
                'uova'     : 2,
                'zucchero' : 200,
}

'farina' in ingredienti
Out[22]:
True
In [23]:
500 in ingredienti
In [24]:
 
Out[24]:
False

E in dizionari complessi?¶

In [25]:
vip = { 
    ('Napoleone','Giuseppina') : 'Parigi',
    ('Romeo', 'Giulietta')     : 'Verona'
}         
In [26]:
vip
Out[26]:
{('Napoleone', 'Giuseppina'): 'Parigi', ('Romeo', 'Giulietta'): 'Verona'}
In [27]:
('Cesare','Cleopatra') in vip
In [28]:
 
Out[28]:
False
['Bonnie', 'Clyde'] in vip
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_9124/998032385.py in <module>
----> 1 ['Bonnie', 'Clyde'] in vip

TypeError: unhashable type: 'list'

Sono uguali?¶

In [29]:
diz1 = {
    'a':'c', 
    'b':'d'
}
diz2 = {
    'b':'d', 
    'a':'c'
}
diz1 == diz2
In [30]:
 
Out[30]:
True
In [31]:
da = {}
da[2] = 5
da[3] = 7

db = {3:7,
      2:5}
print(diz1 == diz2)
In [32]:
 
Out[32]:
True
In [33]:
 
Out[33]:
Python Tutor visualization
In [34]: