Курс 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. Проверка на палиндром
  2. Numpy: разбиение массивов
  3. Округление банкира в Python
  4. Python OrderedDict и fromkeys() — работа с словарями
  5. Применение функции к списку
  6. Python union() функция — объединение множеств
  7. Моржовый оператор в Python 3.8
  8. Оператор «is not» в Python
  9. Оператор обр. импликации
  10. Создание словарей с defaultdict()
  11. Вывод букв строки в Python
  12. Хранение данных
  13. Списковые включения в Python
  14. Создание OrderedDict
  15. Преобразование генераторов в циклы
  16. Метод remove() для удаления элемента из списка
  17. Атрибуты класса и экземпляра
  18. Именованные кортежи в Python
  19. Функция __init__ в Python
  20. Создание пустых функций и классов в Python
  21. Запуск внешнего кода в Jupyter
  22. Управление ресурсами с контекстными менеджерами
  23. Реверс строки в Python
  24. Ограничение итераций в Python
  25. Подсчет элементов с помощью Counter
  26. Оператор «and» в Python
  27. Переменные в Python
  28. Отправка POST-запроса в REST API
  29. Python: изменяемые и неизменяемые коллекции
  30. Создание тестовых данных с Faker
  31. Порядок и длина множеств в Python
  32. Установка переменной среды в Python
  33. Функции map, filter, reduce
  34. Проверка условий в Python
  35. Создание спинбокса в tkinter
  36. Получение частей дроби
  37. Округление в Python
  38. Лямбда-функции в defaultdict
  39. Фильтрация последовательности
  40. Тестирование времени с Freezegun
  41. Декоратор Ajax required
  42. Управление памятью в Python
  43. Контроль точности вывода чисел
  44. Преобразование чисел в Python
  45. Функции all и any в Python
  46. Python defaultdict добавление ключа

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