7.1 Criando dicionários aninhados
Dicionários aninhados são uma maneira muito útil de descrever uma estrutura de dados complexa, com a qual você vai se deparar muito frequentemente. Vamos praticar um pouco na criação deles.
Criando dicionários aninhados
Aqui está um exemplo de como criar um dicionário aninhado:
person = {
"name": "Alice",
"details": {
"age": 25,
"city": "New York",
"address": {
"street": "123 Main St",
"zip": "10001"
},
"mother": "Jane Smith"
},
"gender": "female"
}
print(person) # Saída: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}, 'mother': 'Jane Smith'}, 'gender': 'female'}
Neste exemplo, person é um dicionário que contém um dicionário aninhado details, que por sua vez contém outro dicionário aninhado address.
O dicionário aninhado pode ser criado a partir de partes:
address = {
"street": "123 Main St",
"zip": "10001"
}
details = {
"age": 25,
"city": "New York",
"address": address
}
person = {
"name": "Alice",
"details": details,
"gender": "female"
}
print(person) # Saída: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}}, 'gender': 'female'}
7.2 Acessando elementos de um dicionário aninhado
Acessar elementos de dicionários aninhados é simples e óbvio. Veja como é feito:
Acessando elementos de nível superior
name = person["name"]
print(name) # Saída: Alice
Acessando elementos de um dicionário aninhado
age = person["details"]["age"]
city = person["details"]["city"]
print(age) # Saída: 25
print(city) # Saída: New York
Acessando elementos de um nível mais profundo de aninhamento
street = person["details"]["address"]["street"]
zip_code = person["details"]["address"]["zip"]
print(street) # Saída: 123 Main St
print(zip_code) # Saída: 10001
7.3 Alterando elementos de um dicionário aninhado
Se você já entendeu como acessar elementos de qualquer nível de aninhamento, mudá-los será ainda mais fácil:
Alterando valores de nível superior
person["name"] = "Bob"
print(person["name"]) # Saída: Bob
Alterando valores de um dicionário aninhado
person["details"]["age"] = 26
print(person["details"]["age"]) # Saída: 26
Alterando valores de um nível mais profundo de aninhamento
person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"]) # Saída: Los Angeles
Adicionando novos elementos a um dicionário aninhado
person["details"]["phone"] = "123-456-7890"
print(person["details"]["phone"]) # Saída: 123-456-7890
Removendo elementos de nível superior
# Removendo o elemento 'country' do dicionário 'person'
del person["country"]
print(person) # O elemento 'country' será removido do dicionário
Removendo elementos de um dicionário aninhado
# Removendo o elemento 'phone' do dicionário 'details'
del person["details"]["phone"]
print(person["details"]) # O elemento 'phone' será removido do dicionário 'details'
7.4 Percorrendo dicionários aninhados
Existem várias maneiras de percorrer todos os elementos de um dicionário. Loops são a maneira mais simples de fazê-lo:
Iterando sobre elementos de um dicionário aninhado
for key, value in person.items(): # Percorrendo o dicionário pai
if isinstance(value, dict): # Se o valor é um dicionário
for key2, value2 in value.items(): # Percorrendo elementos do dicionário filho
print(f"{key} --> {key2}: {value2}")
Iteração recursiva sobre todos os níveis de aninhamento
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)
Você aprenderá mais sobre recursão no tópico "Algoritmos e Estruturas de Dados".
Aliás, a recursão é útil para procurar um valor profundamente em dicionários aninhados. Aqui está um exemplo:
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) # Saída: None (já que o elemento 'phone' foi removido)
GO TO FULL VERSION