Курс Python → Преобразование многоуровневого словаря

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

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


def flatten_dict(d: dict) -> dict:
    flat_dict = {}
    for key, value in d.items():
        if isinstance(value, dict):
            value = flatten_dict(value)
            for subkey, subvalue in value.items():
                flat_dict[key + '.' + subkey] = subvalue
        else:
            flat_dict[key] = value
    return flat_dict

# Пример использования функции
nested_dict = {'a': 1, 'b': {'c': 2, 'd': 3}}
flat_dict = flatten_dict(nested_dict)
print(flat_dict)

Для улучшения читаемости и безопасности кода мы можем использовать type hinting. Это позволит явно указать типы аргументов и возвращаемого значения функции. Также стоит учитывать, что при работе с рекурсивными функциями необходимо учитывать базовый случай, чтобы избежать бесконечной рекурсии. В нашем случае, базовым случаем может быть проверка на то, что значение не является словарем.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Сортировка с помощью параметра key
  2. Структура строк в Python
  3. Обработка ошибки IndexError
  4. Генераторы данных
  5. Работа с набором данных CIFAR10 в PyTorch
  6. Удаление специальных символов с помощью re.sub
  7. Создание треугольника Паскаля
  8. Конвертация изображений в PDF
  9. Работа с прокси в Python
  10. Метод __call__ в Python
  11. Печать в одной строке
  12. Модуль os: работа с файлами и папками
  13. Проверка типа объекта в Python
  14. Установка пакетов с помощью pip
  15. Оператор break в Python
  16. Создание списка дат
  17. Названия переменных
  18. Новшества Flask 2.0
  19. История Python
  20. Моржовый оператор в Python 3.8
  21. Хранение данных с помощью dataclasses
  22. Блок else в обработке исключений
  23. Функции в Python: создание и вызов
  24. Асинхронное программирование с asyncio
  25. Переопределение метода divmod
  26. Проверка типа данных
  27. Декораторы с @wraps
  28. Метод join() для объединения строк
  29. Выражения-генераторы в Python
  30. Очистка данных с Pandas
  31. Удаление элемента по индексу
  32. Counter() — подсчет элементов
  33. Изменяемые и неизменяемые объекты
  34. Метод join() с набором
  35. Установка Python3.7 и PIP
  36. Работа со словарями Python
  37. OrderedDict — упорядоченный словарь
  38. Тестирование с responses
  39. Поиск самого длинного слова в списке с использованием max()
  40. Метод title() в Python
  41. Обработка StopIteration в Python
  42. Регистрация на курсы SF Education
  43. Работа с изменяемыми списками
  44. F-строки в Python

Marketello читают маркетологи из крутых компаний