Курс 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. Метод Self в Python
  2. Множественное наследование в Python
  3. Оператор умножения для вектора
  4. Поиск наиболее частого элемента в списке
  5. Метод enumerate() в Python
  6. Объединение коллекций в Python
  7. Транспонирование 2D-массива с помощью zip
  8. Работа со строками в Python
  9. Подсчет часто встречающихся элементов
  10. Concrete Paths в Python
  11. Библиотека Rich: форматирование текста
  12. Сглаживание списка
  13. Установка Python — Простое руководство
  14. Список переменных с %who
  15. Сравнение def и lambda-функций
  16. Работа с процессами в Python
  17. Философия Python
  18. Динамическая типизация в Python
  19. Многоточие в Python
  20. Списковое включение в Python
  21. Итерация по копии коллекции
  22. Конкатенация строк в Python
  23. Использование html-скриптов в Jupyter Notebook
  24. Генераторы в Python
  25. Обработка ошибок в Python
  26. Управление асинхронными задачами на Python.
  27. Особенности множеств в Python
  28. Вычисление разности множеств в Python
  29. Руководство по библиотеке pydantic
  30. Работа с timedelta
  31. Класс-оболочка для словарей
  32. Создание вкладок с TKinter
  33. Сортировка данных с лямбда-функциями
  34. Путь к интерпретатору Python
  35. capitalize() — изменение регистра первого символа строки
  36. Получение пути к текущему скрипту с помощью os
  37. Замена текста с re.sub()
  38. Ограничение ресурсов в Python
  39. Сравнение объектов в Python
  40. Построение графиков в терминале с bashplotlib
  41. Pretty-printing JSON в Python
  42. Копирование объектов в Python
  43. Метод __imod__ для Python
  44. Секреты Python
  45. Определение основы слова с showballstemmer

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