Курс 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. Роль object и type в Python
  2. Генераторные выражения и islice.
  3. Управление IP-адресами через прокси
  4. Defaultdict в Python
  5. Преобразование строки в число
  6. Создание Radio кнопок в tkinter
  7. Работа с каталогами в Python
  8. Извлечение статей с newspaper3k
  9. Работа с zip()
  10. Генераторы в Python
  11. Преобразование типов данных в set comprehension
  12. Метод __iand__ для пользовательских классов
  13. Метод count() для списка
  14. Python: динамическая типизация и проверка типов
  15. Синхронизация доступа к ресурсам
  16. Автоматизация действий с Pyautogui
  17. Документирование функций в Python
  18. Работа с кортежами в Python
  19. Numpy: разбиение массивов
  20. Генераторы словарей и множеств
  21. Работа с f-строками 2.0
  22. Python union() функция — объединение множеств
  23. Оптимизация гиперпараметров с Scikit Optimize
  24. Структура данных deque в Python
  25. Тестирование функции сложения
  26. Работа с контекст-менеджером «with»
  27. Оператор is в Python
  28. Переопределение метода len
  29. Аннотации типов в Python
  30. Изменение элемента списка
  31. Concrete Paths — метод .with_suffix()
  32. Numpy: использование Ellipsis
  33. Генераторы в Python
  34. Работа с collections в Python.
  35. Срез списка в Python
  36. Локальные переменные.
  37. Enum в Python
  38. Переопределение оператора % для объектов
  39. Равенство и идентичность в Python
  40. Мониторинг работы программы Py-spy
  41. Отладка регулярных выражений в Python
  42. Создание коллекций из генератора
  43. Итераторы в Python

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