We continue to explain the use of dict in Python through practical examples.
dict Python – first example
So let’s write a program that generates a dictionary of n elements that contains pairs of values (i, i * i) and therefore values of the type {1: 1, 2: 4, 3: 6,…}.
Let’s solve the algorithm very simply. We first ask how many elements the dictionary must have. Then, with a for loop, we generate the values.
n = int(input('How many items do you want to insert?: '))
d = dict()
for i in range(1, n+1):
d[i] = i * i
print(d)
Let’s try the code directly in the online compiler below:
dict Python – second example
Let’s take a second example with Python dictionaries.
Given a dictionary of contacts, composed of pairs of values Name: Telephone first print all the values with the values() method on the dictionaries and then with a loop for print the telephones.
We could also print the keys, using the keys() method on the dictionary and with a loop to print the names. Here is a possible solution to the variation to the proposed algorithm.
contacts = {
'Tom': '2345610',
'Anna': '12345610',
'Luca': '32345610',
'Harry': '42345610'
}
contacts_names = contacts.keys()
print(contacts_names)
for name contacts_names:
print(name)
dict Python – third example
Let’s take a final example to get some more practice with dictionaries.
Extract 4 cards from a deck of 40 and put them into an initially empty dictionary, created with dict() in Python. The key is the seed, while the value is the number.
Here is a possible solution to the proposed algorithm (we will realize that it is an incorrect procedure and I will also explain why):
import random
def estract_cards():
types = ["Bastoni", "Coppe", "Denari", "Spade"]
numbers = ["Asso",'Due','Tre','Quattro','Cinque','Sei','Sette',"Fante","Cavallo","Re"]
result = dict()
for i in range(1,4):
number = random.choice(numbers)
type = random.choice(types)
result[type] = number
return result
r = estract_cards()
print(r)
If you try the algorithm several times, in the online compiler above, you will find that the dictionary is not always populated with 4 elements. Why does this happen?
As we know, in dictionaries the keys must be unique, this means that every time the algorithm extracts a key that has already been entered, it goes on with the count but does not enter anything.
So the correct and fastest solution is done with the while loop:
import random
def estract_cards():
types = ["Bastoni", "Coppe", "Denari", "Spade"]
numbers = ["Asso",'Due','Tre','Quattro','Cinque','Sei','Sette',"Fante","Cavallo","Re"]
result = dict()
print(len(result))
while len(result) < 4:
number = random.choice(numbers)
type = random.choice(types)
result[type] = number
return result
r = estract_cards()
print(r)
If you try the while solution in the online compiler, this time the dictionary fills up with exactly 4 elements each time. In this case, in fact, I set a condition: as long as the dictionary does not have 4 elements, it continues to extract elements.
In this way we have solved the problem of duplicate keys to populate dictionaries in Python.
Conclusion
In this lesson we have dealt with some Python exercises on dict, in the next lessons I will propose many others.
Continuiamo a spiegare il concetto in Python dei dizionari attraverso degli esempi pratici.
Python dizionari – primo esempio
Scriviamo, dunque, un programma che genera un dizionario di n elementi che contiene delle coppie di valori (i, i * i) quindi valori del tipo {1: 1, 2: 4, 3: 6, … }.
Risolviamo l’algoritmo molto semplicemente. Chiediamo innanzitutto quanti elementi deve avere il dizionario. Dopo, con un ciclo for generiamo i valori.
n = int(input('Quanti elementi vuoi inserire?: '))
d = dict()
for i in range(1, n+1):
d[i] = i * i
print(d)
Proviamo il codice direttamente nel compiler online sotto:
Python dizionari – secondo esempio
Facciamo un secondo esempi con i dizionari in Python.
Dato un dizionario dei contatti, composto da coppie di valori Nome: Telefono stampare dapprima tutti i valori con il metodo values() sui dizionari e dopo con un ciclo for stampare i telefoni.
Potremmo anche stampare le keys, utilizzando il metodo keys() sul dizionario e con un ciclo for stampare i nomi. Di seguito ecco una possibile soluzione alla variazione all’algoritmo proposto.
contacts = {
'Tom': '2345610',
'Anna': '12345610',
'Luca': '32345610',
'Harry': '42345610'
}
contacts_names = contacts.keys()
print(contacts_names)
for name contacts_names:
print(name)
Python dizionari – terzo esempio
Facciamo un ultimo esempio per fare ancora pratica con i dizionari.
Estrarre 4 carte da un mazzo di 40 ed inserirle in un dizionario. La chiave è costituita dal seme, mentre il valore dal numero.
Ecco una possibile soluzione all’algoritmo proposto (ci accorgeremo che è un procedimento errato e vi spiegherò anche il perché):
import random
def estrai():
semi = ["Bastoni", "Coppe", "Denari", "Spade"]
numeri = ["Asso",'Due','Tre','Quattro','Cinque',
'Sei','Sette',"Fante","Cavallo","Re"]
result = dict()
for i in range(1,4):
number = random.choice(numeri)
seme = random.choice(semi)
result[seme] = number
return result
r = estrai()
print(r)
Se provate più volte l’algoritmo, nel compiler online sopra, vi accorgerete che non sempre il dizionario si popola di 4 elementi. Perchè avviene questo?
Come sappiamo, nei dizionari le chiavi devono essere uniche, questo vuol dire che ogni volta che l’algoritmo estrae una chiave che già è stata inserita, va avanti con il conteggio ma non inserisce nulla.
Dunque la soluzione corretta e più veloce si realizza con il ciclo while:
def estrai():
semi = ["Bastoni", "Coppe", "Denari", "Spade"]
numeri = ["Asso",'Due','Tre','Quattro','Cinque','Sei','Sette',"Fante","Cavallo","Re"]
result = dict()
print(len(result))
while len(result) < 4:
number = random.choice(numeri)
seme = random.choice(semi)
result[seme] = number
return result
r = estrai()
print(r)
Se provate nel compiler online la soluzione con il while, questa volta il dizionario si riempie esattamente di 4 elementi ogni volta. In questo caso infatti imposto una condizione: finchè il dizionario non ha 4 elementi continua ad estrarre elementi.
Abbiamo in questo modo risolto il problema delle chiavi duplicati per popolare i dizionari in Python.
Conclusioni
In questa lezione abbiamo affrontato alcuni esercizi di Python sui dizionari, nelle prossime lezioni ve ne proporrò tanti altri.
Commenti recenti