Курс 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. Структуры данных в Python
  2. Создание копии списка в Python
  3. Функция map() и ленивая оценка
  4. Проектирование Singleton с метаклассом
  5. Транспонирование матрицы в Python
  6. Создание пустых функций и классов в Python
  7. Объединение словарей в Python
  8. Нахождение хеша для бесконечности и NaN в Python
  9. Python: изменяемые и неизменяемые коллекции
  10. Работа со строками в Python
  11. Различия символов в Python
  12. Управление ресурсами в Python
  13. Поиск индекса элемента в списке
  14. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  15. Извлечение статей с newspaper3k
  16. Использование метода lower()
  17. Копирование списков в Python
  18. Показ всплывающих окон Tkinter
  19. Модуль os в Python: работа с файлами
  20. Работа с срезами в Python
  21. Обработка исключений в Python 3
  22. Компиляция регулярных выражений
  23. Работа с контекст-менеджером «with»
  24. Работа с кортежами
  25. Принципы Zen of Python
  26. Декораторы в Python
  27. Создание новых функций через partial
  28. Таймер обратного отсчета
  29. Метод lt для сортировки объектов
  30. Метод difference_update() — разность множеств
  31. Логирование с Logzero
  32. Метод ifloordiv для пользовательских классов
  33. Функциональное программирование.
  34. Подчеркивание в REPL
  35. Удаление пробелов методом translate()
  36. Работа с утверждениями в Python
  37. Создание списка через итерацию
  38. Функция __init__ в Python
  39. Изменение логики работы с временем
  40. Срезы в Numpy
  41. Непрерывная проверка в Python
  42. Переворот последовательности
  43. EMOT преобразование эмодзи в текст
  44. Поиск индексов в списке

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