CodeGym /Cursos /Python SELF PT /Dicionários aninhados

Dicionários aninhados

Python SELF PT
Nível 11 , Lição 7
Disponível

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)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION