7.1 Створення вкладених словників
Вкладені словники — це дуже зручний спосіб опису складної структури даних, з яким ти будеш стикатися дуже часто. Давай трохи попрактикуємося в їх створенні.
Створення вкладених словників
Ось приклад створення вкладеного словника:
person = {
"name": "Alice",
"details": {
"age": 25,
"city": "New York",
"address": {
"street": "123 Main St",
"zip": "10001"
},
"mother": "Jane Smith"
},
"gender": "female"
}
print(person) # Вивід: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}, 'mother': 'Jane Smith'}, 'gender': 'female'}
У цьому прикладі person — це словник, що містить вкладений словник details, який, у свою чергу, містить інший вкладений словник address.
Вкладений словник можна створити і з шматочків:
address = {
"street": "123 Main St",
"zip": "10001"
}
details = {
"age": 25,
"city": "New York",
"address": address
}
person = {
"name": "Alice",
"details": details,
"gender": "female"
}
print(person) # Вивід: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}}, 'gender': 'female'}
7.2 Доступ до елементів вкладеного словника
Доступ до елементів вкладених словників простий і очевидний. Ось як це робиться:
Доступ до елементів верхнього рівня
name = person["name"]
print(name) # Вивід: Alice
Доступ до елементів вкладеного словника
age = person["details"]["age"]
city = person["details"]["city"]
print(age) # Вивід: 25
print(city) # Вивід: New York
Доступ до елементів глибшого рівня вкладеності
street = person["details"]["address"]["street"]
zip_code = person["details"]["address"]["zip"]
print(street) # Вивід: 123 Main St
print(zip_code) # Вивід: 10001
7.3 Зміна елементів вкладеного словника
Якщо ти вже розібрався, як виводити елементи будь-якого ступеня вкладеності, то зміна їх буде ще простішою:
Зміна значень верхнього рівня
person["name"] = "Bob"
print(person["name"]) # Вивід: Bob
Зміна значень вкладеного словника
person["details"]["age"] = 26
print(person["details"]["age"]) # Вивід: 26
Зміна значень глибшого рівня вкладеності
person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"]) # Вивід: Los Angeles
Додавання нових елементів до вкладеного словника
person["details"]["phone"] = "123-456-7890"
print(person["details"]["phone"]) # Вивід: 123-456-7890
Видалення елементів верхнього рівня
# Видаляємо елемент 'country' зі словника 'person'
del person["country"]
print(person) # Елемент 'country' буде видалено зі словника
Видалення елементів з вкладеного словника
# Видаляємо елемент 'phone' зі словника 'details'
del person["details"]["phone"]
print(person["details"]) # Елемент 'phone' буде видалено зі словника 'details'
7.4 Обхід вкладених словників
Існує декілька способів обійти всі елементи словника. Цикли – найпростіший з них:
Ітерація по елементах вкладеного словника
for key, value in person.items(): # Обходимо батьківський словник
if isinstance(value, dict): # Якщо значення - це словник
for key2, value2 in value.items(): # Обходимо елементи дочірнього словника
print(f"{key} --> {key2}: {value2}")
Рекурсивна ітерація по всіх рівнях вкладеності
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)
Докладніше про рекурсію ти дізнаєшся в темі «Алгоритми та Структури даних».
До речі, рекурсію зручно використовувати для пошуку значення глибоко у вкладених словниках. Ось приклад:
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) # Вивід: None (оскільки елемент 'phone' був видалений)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ