Курс 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. Оператор in в Python
  2. Python: библиотеки и функции
  3. Измерение времени выполнения кода
  4. Приближение чисел в Python
  5. Подсчет элементов с помощью Counter
  6. Метод __complex__ в Python
  7. Оператор «not» в Python
  8. Генерация строк с .join()
  9. Разделение строки на подстроки в Python
  10. Именование столбцов в Python с pandas
  11. Создание лямбда-функций
  12. Модуль antigravity: генерация координат
  13. Регистрация на курсы SF Education
  14. Проверка типов с помощью isinstance
  15. Нахождение самого длинного слова в списке с помощью max
  16. Замена текста с помощью sub
  17. Пустой оператор pass в Python
  18. Использование модуля math
  19. Проверка окончания строки с помощью str.endswith()
  20. Экспорт данных в файл.
  21. Python: отсутствие точек с запятыми
  22. Добавление вложенных списков
  23. Объединение словарей в Python
  24. Списковое включение в Python
  25. Функция с **kwargs в Python
  26. Разница между датами
  27. Преобразование списка в словарь через генератор
  28. Подсчет элементов в Python
  29. Поиск повторов в списке
  30. Аннотации типов в Python
  31. Установка и загрузка Instaloader
  32. Декоратор для группы пользователей в Django
  33. Преобразование числа в восьмеричную строку
  34. Измерение времени выполнения кода
  35. Бесконечная проверка в Python
  36. Функции map, filter и reduce
  37. Функция с *args.
  38. Многопроцессорное программирование в Python
  39. Работа с модулем os в Python
  40. Поиск самого длинного слова в списке с использованием max()
  41. Проверка существования переменной с оператором :=
  42. Удаление дубликатов из списка с помощью dict.fromkeys
  43. Разделение функций на этапы
  44. IPython и Jupyter Notebook: руководство
  45. Преобразование регистра строк

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