Курс 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. Основные методы NumPy
  3. Равенство и идентичность в Python
  4. Метод rename() для переименования файлов и каталогов
  5. Частичное совпадение ввода
  6. OrderedDict — упорядоченный словарь
  7. Форматирование строк в Python
  8. Декораторы классов
  9. Анонимные функции в Python
  10. Конкатенация строк с помощью join()
  11. Метод __float__ в Python
  12. Правила именования переменных
  13. Преобразование регистра символов
  14. Метод __irshift__ для Python
  15. Проверка окончания строки с помощью str.endswith()
  16. Форматирование вывода с F-строками
  17. Использование type hints
  18. Проверка строки на палиндром
  19. Замена символов в строке
  20. Методы Python для работы с данными
  21. Логирование с Logzero: ротация файла
  22. Форматирование данных с помощью pprint
  23. Работа со случайными элементами
  24. Распаковка значений в Python
  25. Освоение Python
  26. Создание вложенных циклов for
  27. Метод clear для коллекций
  28. Объявление переменных в Python
  29. Метод rsub в Python: расширение функциональности вычитания
  30. ChainMap.new_child() — добавление нового словаря
  31. Очистка вывода в Python
  32. Оптимизация памяти с __slots__
  33. Конкатенация строковых литералов
  34. Создание генераторов в Python
  35. Методы HTTP запросов в Flask
  36. Добавление кнопки в tkinter
  37. Обход словаря в Python
  38. Управление экспортом элементов
  39. discard() — удаление элемента из множества
  40. Генерация QR-кодов с библиотекой qrcode
  41. Генерация резюме в Gensim
  42. Основные операции с библиотекой Numpy
  43. Установка пакета в Python
  44. Progress с библиотекой tqdm
  45. Работа с часовыми поясами в Python
  46. Обработка исключений в Python
  47. Выражения-генераторы в Python
  48. Объединение объектов в Python

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