Курс 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. Форматирование данных с pprint
  3. Перегрузка операторов в Python
  4. Работа с deque в Python
  5. Тест скорости набора текста на Python
  6. Работа с кортежами в Python
  7. Метод rrshift для пользовательских объектов
  8. Метод __irshift__ для побитового сдвига вправо
  9. Группы исключений в Python
  10. Логирование с Logzero
  11. Работа со строками в Python
  12. Генерация тестовых данных с factory_boy
  13. Частичное совпадение пользовательского ввода в Python 3.10
  14. Преобразование чисел в Python
  15. Создание словарей в Python
  16. Функция count() в Python
  17. Оператор in для проверки наличия элемента
  18. Оператор «моржа» (Walrus Operator)
  19. Работа с Requests для HTTP-запросов
  20. Генераторы в Python
  21. Бесконечная проверка в Python
  22. Декораторы в Python
  23. Удаление файлов и папок в Python
  24. Переворот строки с помощью срезов
  25. Оптимизация создания строк
  26. Работа с байтовыми строками в Python
  27. Параллельные вычисления в Python
  28. Передача аргументов в Python
  29. Переопределение унарных операторов
  30. Печать календаря
  31. Получение ID процесса
  32. Функции all и any в Python
  33. Обновление данных через PUT запрос
  34. Глобальные переменные в Python
  35. Безопасный доступ к значениям словаря
  36. Извлечение новостей с помощью newspaper3k
  37. Поиск подстроки в строке
  38. Переопределение метода __or__()
  39. Преобразование в float
  40. Создание списков в Python
  41. Выбор редактора кода.
  42. Присвоение значений переменным в Python
  43. Операторы увеличения и уменьшения переменной
  44. Печать месячного календаря
  45. Удаление эмодзи с помощью pandas

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