7.1 Création de dictionnaires imbriqués
Les dictionnaires imbriqués sont un moyen très pratique de décrire une structure de données complexe, que tu rencontreras très souvent. Pratiquons-nous un peu à leur création.
Création de dictionnaires imbriqués
Voici un exemple de création d'un dictionnaire imbriqué :
person = {
"name": "Alice",
"details": {
"age": 25,
"city": "New York",
"address": {
"street": "123 Main St",
"zip": "10001"
},
"mother": "Jane Smith"
},
"gender": "female"
}
print(person) # Sortie : {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}, 'mother': 'Jane Smith'}, 'gender': 'female'}
Dans cet exemple, person est un dictionnaire contenant un dictionnaire imbriqué details, qui à son tour contient un autre dictionnaire imbriqué address.
Un dictionnaire imbriqué peut aussi être créé à partir de morceaux :
address = {
"street": "123 Main St",
"zip": "10001"
}
details = {
"age": 25,
"city": "New York",
"address": address
}
person = {
"name": "Alice",
"details": details,
"gender": "female"
}
print(person) # Sortie : {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}}, 'gender': 'female'}
7.2 Accès aux éléments d'un dictionnaire imbriqué
Accéder aux éléments de dictionnaires imbriqués est simple et intuitif. Voici comment faire :
Accès aux éléments de niveau supérieur
name = person["name"]
print(name) # Sortie : Alice
Accès aux éléments d'un dictionnaire imbriqué
age = person["details"]["age"]
city = person["details"]["city"]
print(age) # Sortie : 25
print(city) # Sortie : New York
Accès aux éléments d'un niveau plus profond d'imbrication
street = person["details"]["address"]["street"]
zip_code = person["details"]["address"]["zip"]
print(street) # Sortie : 123 Main St
print(zip_code) # Sortie : 10001
7.3 Modification des éléments d'un dictionnaire imbriqué
Si tu sais déjà comment afficher des éléments de n'importe quel niveau d'imbrication, les modifier sera encore plus simple :
Modification des valeurs de niveau supérieur
person["name"] = "Bob"
print(person["name"]) # Sortie : Bob
Modification des valeurs d'un dictionnaire imbriqué
person["details"]["age"] = 26
print(person["details"]["age"]) # Sortie : 26
Modification des valeurs à un niveau plus profond d'imbrication
person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"]) # Sortie : Los Angeles
Ajout de nouveaux éléments dans un dictionnaire imbriqué
person["details"]["phone"] = "123-456-7890"
print(person["details"]["phone"]) # Sortie : 123-456-7890
Suppression des éléments de niveau supérieur
# Suppression de l'élément 'country' du dictionnaire 'person'
del person["country"]
print(person) # L'élément 'country' sera supprimé du dictionnaire
Suppression des éléments d'un dictionnaire imbriqué
# Suppression de l'élément 'phone' du dictionnaire 'details'
del person["details"]["phone"]
print(person["details"]) # L'élément 'phone' sera supprimé du dictionnaire 'details'
7.4 Parcours des dictionnaires imbriqués
Il existe plusieurs façons de parcourir tous les éléments d'un dictionnaire. Les boucles sont la méthode la plus simple :
Itération sur les éléments d'un dictionnaire imbriqué
for key, value in person.items(): # On parcourt le dictionnaire parent
if isinstance(value, dict): # Si la valeur est un dictionnaire
for key2, value2 in value.items(): # On parcourt les éléments du dictionnaire enfant
print(f"{key} --> {key2}: {value2}")
Itération récursive sur tous les niveaux d'imbrication
def print_dict(d, indent=0):
for key, value in d.items():
print(" " * indent + str(key) + ": ", end="")
if isinstance(value, dict):
print()
print_dict(value, indent + 1)
else:
print(value)
print_dict(person)
Tu apprendras plus sur la récursion dans le sujet « Algorithmes et Structures de données ».
En passant, la récursion est pratique pour chercher une valeur profondément dans des dictionnaires imbriqués. Voici un exemple :
def find_key(d, key):
if key in d:
return d[key]
for k, v in d.items():
if isinstance(v, dict):
result = find_key(v, key)
if result:
return result
return None
phone = find_key(person, "phone")
print(phone) # Sortie : None (puisque l'élément 'phone' a été supprimé)
GO TO FULL VERSION