CodeGym /Kursy /Python SELF PL /Zagnieżdżone słowniki

Zagnieżdżone słowniki

Python SELF PL
Poziom 11 , Lekcja 7
Dostępny

7.1 Tworzenie zagnieżdżonych słowników

Zagnieżdżone słowniki to bardzo wygodny sposób opisu skomplikowanej struktury danych, z którym często będziesz się spotykał. Poćwiczmy trochę ich tworzenie.

Tworzenie zagnieżdżonych słowników

Oto przykład tworzenia zagnieżdżonego słownika:


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

W tym przykładzie person to słownik zawierający zagnieżdżony słownik details, który z kolei zawiera inny zagnieżdżony słownik address.

Zagnieżdżony słownik można stworzyć także z kawałków:


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

7.2 Dostęp do elementów zagnieżdżonego słownika

Dostęp do elementów zagnieżdżonych słowników jest prosty i oczywisty. Oto jak to się robi:

Dostęp do elementów poziomu najwyższego


name = person["name"]
print(name)  # Wyświetli: Alice

Dostęp do elementów zagnieżdżonego słownika


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

Dostęp do elementów głębszego poziomu zagnieżdżenia


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

7.3 Zmiana elementów zagnieżdżonego słownika

Jeśli już wiesz, jak wyświetlić elementy dowolnego stopnia zagnieżdżenia, to zmienianie ich będzie jeszcze prostsze:

Zmiana wartości poziomu najwyższego


person["name"] = "Bob"
print(person["name"])  # Wyświetli: Bob

Zmiana wartości zagnieżdżonego słownika


person["details"]["age"] = 26
print(person["details"]["age"])  # Wyświetli: 26

Zmiana wartości głębszego poziomu zagnieżdżenia


person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"])  # Wyświetli: Los Angeles

Dodawanie nowych elementów do zagnieżdżonego słownika


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

Usuwanie elementów poziomu najwyższego


# Usuwamy element 'country' ze słownika 'person'
del person["country"]
print(person)  # Element 'country' zostanie usunięty ze słownika

Usuwanie elementów z zagnieżdżonego słownika


# Usuwamy element 'phone' ze słownika 'details'
del person["details"]["phone"]
print(person["details"])  # Element 'phone' zostanie usunięty ze słownika 'details'

7.4 Przechodzenie zagnieżdżonych słowników

Istnieje kilka sposobów na przejście przez wszystkie elementy słownika. Pętle są najprostszym z nich:

Iteracja po elementach zagnieżdżonego słownika


for key, value in person.items():  # Przechodzimy przez rodzicielski słownik
    if isinstance(value, dict):  # Jeśli wartość jest słownikiem
        for key2, value2 in value.items():  # Przechodzimy przez elementy potomnego słownika
            print(f"{key} --> {key2}: {value2}")

Rekurencyjna iteracja po wszystkich poziomach zagnieżdżenia


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)

Więcej na temat rekurencji dowiesz się z tematu „Algorytmy i Struktury danych”.

Przy okazji, rekurencję można wygodnie używać do wyszukiwania wartości głęboko we zagnieżdżonych słownikach. Oto przykład:


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)  # Wyświetli: None (ponieważ element 'phone' został usunięty)
1
Опрос
Praca z Git,  11 уровень,  7 лекция
недоступен
Praca z Git
Praca z Git
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION