CodeGym /Curso de Java /Python SELF ES /Diccionarios Anidados

Diccionarios Anidados

Python SELF ES
Nivel 11 , Lección 7
Disponible

7.1 Creación de diccionarios anidados

Los diccionarios anidados son una manera muy conveniente de describir estructuras de datos complejas, con la que te encontrarás muy a menudo. Practiquemos un poco en su creación.

Creación de diccionarios anidados

Aquí hay un ejemplo de cómo crear un diccionario anidado:


person = {
    "name": "Alice",
    "details": {
        "age": 25,
        "city": "New York",
        "address": {
            "street": "123 Main St",
            "zip": "10001"
        },
        "mother": "Jane Smith"
    },
    "gender": "female"
}
print(person)  # Salida: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}, 'mother': 'Jane Smith'}, 'gender': 'female'}

En este ejemplo, person es un diccionario que contiene un diccionario anidado details, que a su vez contiene otro diccionario anidado address.

Un diccionario anidado también puede crearse 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)  # Salida: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}}, 'gender': 'female'}

7.2 Acceso a elementos de un diccionario anidado

Acceder a los elementos de diccionarios anidados es simple y directo. Aquí te mostramos cómo hacerlo:

Acceso a elementos de nivel superior


name = person["name"]
print(name)  # Salida: Alice

Acceso a elementos de un diccionario anidado


age = person["details"]["age"]
city = person["details"]["city"]
print(age)  # Salida: 25
print(city)  # Salida: New York

Acceso a elementos de niveles más profundos


street = person["details"]["address"]["street"]
zip_code = person["details"]["address"]["zip"]
print(street)  # Salida: 123 Main St
print(zip_code)  # Salida: 10001

7.3 Modificación de elementos en diccionarios anidados

Si ya has aprendido cómo mostrar elementos de cualquier nivel de anidación, entonces cambiarlos será aún más fácil:

Modificación de valores de nivel superior


person["name"] = "Bob"
print(person["name"])  # Salida: Bob

Modificación de valores en un diccionario anidado


person["details"]["age"] = 26
print(person["details"]["age"])  # Salida: 26

Modificación de valores en niveles más profundos


person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"])  # Salida: Los Angeles

Adición de nuevos elementos a un diccionario anidado


person["details"]["phone"] = "123-456-7890"
print(person["details"]["phone"])  # Salida: 123-456-7890

Eliminación de elementos de nivel superior


# Eliminamos el elemento 'country' del diccionario 'person'
del person["country"]
print(person)  # El elemento 'country' será eliminado del diccionario

Eliminación de elementos en un diccionario anidado


# Eliminamos el elemento 'phone' del diccionario 'details'
del person["details"]["phone"]
print(person["details"])  # El elemento 'phone' será eliminado del diccionario 'details'

7.4 Recorrido de diccionarios anidados

Hay varias formas de recorrer todos los elementos de un diccionario. Los bucles son la forma más sencilla:

Iteración sobre elementos de un diccionario anidado


for key, value in person.items():  # Recorrido del diccionario padre
    if isinstance(value, dict):  # Si el valor es un diccionario
        for key2, value2 in value.items():  # Recorrido de los elementos del diccionario hijo
            print(f"{key} --> {key2}: {value2}")

Iteración recursiva en todos los niveles de anidación


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)

Aprenderás más sobre recursividad en el tema «Algoritmos y Estructuras de Datos».

Por cierto, la recursividad es útil para buscar valores en lo profundo de los diccionarios anidados. Aquí tienes un ejemplo:


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)  # Salida: None (ya que el elemento 'phone' fue eliminado)
1
Опрос
Trabajo con Git,  11 уровень,  7 лекция
недоступен
Trabajo con Git
Trabajo con Git
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION