Вот упрощенная структура данных, с которой я работаю:
Код: Выделить всё
data = {
"name": "John",
"contacts": [
{
"type": "email",
"value": "john@example.com",
},
{
"type": "phone",
"value": [
{
"country": "US",
"number": "123-456-7890"
},
{
"country": "UK",
"number": "987-654-3210"
}
]
}
],
"address": {
"city": "New York",
"postal_code": "10001",
"coordinates": [
{
"lat": 40.7128,
"lon": -74.0060
}
]
}
}
Код: Выделить всё
["John", "email", "john@example.com", "phone", "123-456-7890", "US", "987-654-3210", "UK", "New York", "10001", 40.7128, -74.0060]
Код: Выделить всё
def flatten(data):
flat_list = []
if isinstance(data, dict):
for key, value in data.items():
flat_list.extend(flatten(value))
elif isinstance(data, list):
for item in data:
flat_list.extend(flatten(item))
else:
flat_list.append(data)
return flat_list
flattened_data = flatten(data)
print(flattened_data)
[*]Увеличение предела рекурсии с помощью sys.setrecursionlimit(), но это только незначительно помогает и не полностью влияет на производительность проблемы.
[*]Оптимизация рекурсивной функции путем преобразования ее в итеративный подход, но я не уверен, как управлять рекурсией вручную для глубоко вложенных структур.
< /ul>
1. Как я могу улучшить рекурсию или провести рефакторинг этого кода для эффективной обработки более глубоких структур?
2. Существует ли итеративный способ сгладить эту структуру данных, не сталкиваясь с ограничениями глубины рекурсии?
3. Существуют ли какие-либо известные библиотеки или шаблоны, которые могут более эффективно обрабатывать очень глубокие и сложные структуры данных, подобные этой?
Я забыл упомянуть: структура является динамической и может не всегда следует одному и тому же шаблону (словари не всегда могут содержать одни и те же ключи, списки не всегда могут содержать одни и те же типы данных), поэтому функция должна быть максимально общей
Подробнее здесь: https://stackoverflow.com/questions/793 ... issue-with