Полное руководство по вложенным словарям в Python

В этом уроке вы узнаете о вложенных словарях Python – словарях, которые являются значениями другого словаря. Вы научитесь создавать вложенные словари, получать доступ к их элементам, изменять их и многое другое. Вы также узнаете, как работать с вложенными словарями для их преобразования в Pandas DataFrame.

В конце этого учебника вы узнаете:

  • Какие вложенные словари есть в Python

  • Как создавать вложенные словари в Python

  • Как получить доступ, изменить и удалить элементы во вложенных словарях

  • Как преобразовать вложенные словари в DataFrames Pandas

Оглавление

Вложенные словари Python

Python-словарь — это контейнерная структура данных, которая хранит пары ключ:значение. Они создаются с помощью фигурных скобок {}, где значение можно найти, обратившись к его уникальному ключу. Давайте рассмотрим простой пример словаря:

# Простой словарь Python
user = {
    'Name': 'Nik',           # Ключ 'Name' со значением 'Nik'
    'Profession': 'datagy'   # Ключ 'Profession' со значением 'datagy'
}

В приведенном выше словаре у нас есть элемент под названием user. Мы можем получить доступ к его значениям, ссылаясь на ключи словаря. Скажем, мы хотим получить значение словаря для ключа 'Name', мы могли бы написать:

# Доступ к значению словаря
print(user.get('Name'))   # То же самое, что и user['Name']

# Возвращает: Nik

Интересный аспект словарей Python заключается в том, что в качестве их значений мы можем использовать другие словари. Это подводит нас к основной теме этой статьи.

Предположим, мы хотим создать словарь, который содержит информацию о пользователях на основе их ID. Давайте создадим словарь, который хранит информацию о нескольких пользователях, распределенную по ID:

# Понимание вложенных словарей
users = {
    1: {
        'Name': 'Nik',           # Ключ 'Name' со значением 'Nik'
        'Profession': 'datagy'   # Ключ 'Profession' со значением 'datagy'
    }, 
    2: {
        'Name': 'Kate',          # Ключ 'Name' со значением 'Kate'
        'Profession': 'Government'  # Ключ 'Profession' со значением 'Government'
    }    
}

В этом примере наш ранний словарь был встроен в новый, более крупный словарь. Мы создали новый, вложенный словарь. В следующем разделе мы разберёмся, как создавать вложенные словари.

Создание вложенных словарей в Python

В этом разделе вы узнаете, как создавать вложенные словари. Вложенные словари — это словари, которые имеют другой словарь в качестве одного или нескольких значений. Давайте рассмотрим, как можно создать вложенные словари в Python.

Давайте рассмотрим пример:

# Создание вложенного словаря в Python
users = {}

Nik = {
        'Name': 'Nik',           # Ключ 'Name' со значением 'Nik'
        'Profession': 'datagy'   # Ключ 'Profession' со значением 'datagy'
    }

Kate = {
        'Name': 'Kate',          # Ключ 'Name' со значением 'Kate'
        'Profession': 'Government'  # Ключ 'Profession' со значением 'Government'
}

users[1] = Nik   # Добавляем словарь Nik в users с ключом 1
users[2] = Kate  # Добавляем словарь Kate в users с ключом 2

print(users)

# Возвращает: {1: {'Name': 'Nik', 'Profession': 'datagy'}, 2: {'Name': 'Kate', 'Profession': 'Government'}}

Давайте разберем, что мы здесь сделали:

  1. Мы создали пустой словарь users

  2. Мы создали два других словаря, Nik и Kate

  3. Затем мы назначили эти словари значениями соответствующих ключей 1 и 2 в словаре users

Доступ к элементам во вложенных словарях в Python

В этом разделе вы узнаете, как получить доступ к элементам вложенного словаря Python. В предыдущем разделе мы рассмотрели использование метода .get() для доступа к элементам. Давайте посмотрим, что происходит, когда мы пытаемся получить доступ к элементу во вложенном словаре:

# Доступ к элементу во вложенном словаре
users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

print(users.get(1))

# Возвращает: {'Name': 'Nik', 'Profession': 'datagy'}

Мы видим, что это вернуло словарь! Так как был возвращен словарь, мы можем получить доступ к элементу в возвращенном словаре.

Если мы хотим получить доступ к 'Name' пользователя 1, мы можем написать следующее:

# Доступ к вложенным элементам в словарях Python
users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

print(users.get(1).get('Name'))

# Возвращает: Nik

Мы можем вызывать метод .get() несколько раз, так как мы имеем дело со словарем, который находится внутри другого словаря. В следующем разделе вы узнаете, как изменять элементы в вложенном словаре.

Изменение элементов во вложенных словарях в Python

В этом разделе вы узнаете, как изменять элементы во вложенных словарях. Чтобы изменить элементы, мы используем тот же процесс, что и для добавления нового элемента в словарь. В этом случае нам просто нужно перейти немного дальше, к ключу вложенного словаря.

Предположим, мы хотим изменить профессию пользователя 2 на 'Habitat for Humanity'. Мы можем написать:

# Изменение элементов во вложенном словаре
users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

users[2]['Profession'] = 'Habitat for Humanity'  # Изменяем профессию пользователя с ключом 2

print(users)

# Возвращает: 
# {1: {'Name': 'Nik', 'Profession': 'datagy'}, 2: {'Name': 'Kate', 'Profession': 'Habitat for Humanity'}}

В данном случае, мы смогли получить доступ к значению ключа через прямое присваивание. Если бы этот ключ ранее не существовал, то ключ (и значение) были бы созданы.

Удаление элементов во вложенных словарях в Python

Словари Python используют ключевое слово del для удаления пары key:value из словаря. Чтобы сделать это в вложенном словаре, нам просто нужно пройти дальше в словарь. Давайте посмотрим, как мы можем удалить ключ 'Profession' из словаря 1:

# Удаление элемента из вложенного словаря
users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

del users[1]['Profession']  # Удаляем элемент 'Profession' из словаря с ключом 1

print(users)

# Возвращает: 
# {1: {'Name': 'Nik'}, 2: {'Name': 'Kate', 'Profession': 'Government'}}

Аналогично, мы можем удалить весь вложенный словарь, используя тот же метод. Поскольку вложенный словарь на самом деле представляет собой пару key:value в нашем основном словаре, применяется тот же метод. Давайте удалим весь первый словарь 1:

# Удаление целого вложенного словаря
users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

del users[1]  # Удаляем словарь с ключом 1

print(users)

# Возвращает: 
# {2: {'Name': 'Kate', 'Profession': 'Government'}}

В следующем разделе вы узнаете, как перебирать вложенные словари в Python.

Перебор вложенных словарей в Python

В этом разделе вы узнаете, как итерировать по вложенным словарям. Это может быть полезно, когда вы хотите вывести значения словаря. Мы можем построить рекурсивную функцию для этого. Давайте посмотрим, как это выглядит:

# Итерация через вложенные словари рекурсивно
users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

def iterate_dict(dict_to_iterate):
    for key, value in dict_to_iterate.items():
        if isinstance(value, dict):
            print(key)
            iterate_dict(value)
        else:
            print(key + ":" + value)

iterate_dict(users)

# Возвращает:
# 1
# Name:Nik
# Profession:datagy
# 2
# Name:Kate
# Profession:Government

Преобразование вложенного словаря Python в фрейм данных Pandas

В этом последнем разделе вы узнаете, как преобразовать вложенный словарь в DataFrame Pandas. Мы можем просто передать вложенный словарь в конструктор DataFrame(). Однако Pandas прочитает DataFrame с ключами в качестве индексов.

Чтобы обойти это, мы можем транспонировать DataFrame, используя метод .T:

# Чтение вложенного словаря в DataFrame Pandas
import pandas as pd

users = {
    1: {'Name': 'Nik', 'Profession': 'datagy'},   # Словарь для пользователя с ключом 1
    2: {'Name': 'Kate', 'Profession': 'Government'}   # Словарь для пользователя с ключом 2
}

# Преобразуем в DataFrame, транспонируем для правильной организации данных
df = pd.DataFrame(users).T

print(df)

# Возвращает:
#    Name  Profession
# 1   Nik      datagy
# 2  Kate  Government

Заключение

В этом руководстве вы узнали о вложенных словарях в Python. Вы узнали, что такое вложенные словари. Затем вы узнали, как получать доступ, изменять и удалять их элементы. Наконец, вы узнали, как итерировать по вложенным словарям, а также как считывать их в DataFrames Pandas.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с учебными материалами ниже:

  • Python Defaultdict: обзор и примеры

  • Python: добавить пару «ключ: значение» в словарь

  • Python: сортировка словаря по значениям

  • Слияние словарей Python – объединение словарей (7 способов)

Last updated