33. Рекурсивное извлечение пар из словаря
Условие задачи: Написать функцию, которая принимает на вход словарь и возвращает список всех пар “ключ-значение”. Если значение является вложенным словарём, функция должна рекурсивно извлекать ключи и значения из этого словаря.
Пример:
data = {'a': 1, 'b': {'c': 2, 'd': {'e': 3}}, 'f': 4}
>>>[('a', 1), ('c', 2), ('e', 3), ('f', 4)]
Спойлеры к решению
Подсказки
- Нужно пройтись по всем парам
key, valueсловаря. - Если
valueявляется обычным значением, добавляем пару(key, value)в результат. - Если
valueявляется словарём, нужно рекурсивно обработать этот вложенный словарь. - Ключи, у которых значение является словарём, в результат не добавляются.
- Для проверки типа можно использовать
isinstance(value, dict).
Решение
def get_pairs(data: dict) -> list[tuple]:
result = []
for key, value in data.items():
if isinstance(value, dict):
result.extend(get_pairs(value))
else:
result.append((key, value))
return result
Пример использования:
data = {
"a": 1,
"b": {
"c": 2,
"d": {
"e": 3
}
},
"f": 4
}
print(get_pairs(data))
Результат:
[('a', 1), ('c', 2), ('e', 3), ('f', 4)]
Функция проходит по словарю. Если значение является вложенным словарём, функция вызывает сама себя для этого словаря. Если значение не является словарём, пара (ключ, значение) добавляется в итоговый список.
Ключи "b" и "d" не попадают в результат, потому что они указывают на вложенные словари, а по условию нужно извлечь конечные пары ключ-значение.