У меня есть рекурсивная функция, которая возвращает ключи вложенных словарей, сгруппированные по их рангу (глубине вложенности):
def nestedDictValues(d, values={}, rank=0):
if not rank in values:
values[rank] = []
for k in d:
if type(d[k]) is dict:
values = nestedDictValues(d[k], values, rank+1)
if not k in values[rank]:
values[rank].append(k)
return values
testDict = {"A": {"B": "",
"C": ""},
"D": {"E": ""}
}
При первом запуске функции я получаю ожидаемый результат
nestedDictValues(testDict["A"] )
{0: ['B', 'C']
Если я запущу функцию во второй раз с клавиши "Е" получаю неожиданный результат:
nestedDictValues(testDict["D"])
{0: ['B', 'C', 'E']} # Вместо { 0: ['E']
Как это вообще возможно? Почему «значения» сохраняют данные с первого запуска?
Мне удалось решить эту проблему, перезапустив «значения» в самой первой рекурсии, но я не понимаю, как именно это работает
def nestedDictValues(d, values={}, rank=0, firstCall=True):
if firstCall: values = {}
if not rank in values:
values[rank] = []
for k in d:
if type(d[k]) is dict:
values = nestedDictValues(d[k], values, rank, firstCall=False)
if not k in values[rank]:
values[rank].append(k)
return values
Подробнее здесь: https://stackoverflow.com/questions/793 ... tion-a-sec
Переменная внутри рекурсивной функции не сбрасывается при повторном вызове основной функции в Python [дубликат] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение