Вы можете добавить depth
аргумент к вашей рекурсивной функции:
d = {"12": "a",
"3": "b",
"8": {
"12": "c",
"25": "d"
}
}
keys_list = []
def iterate(dictionary, depth=0):
for key, value in dictionary.items():
if key not in keys_list:
keys_list.append((key, depth))
if isinstance(value,dict):
depth += 1
iterate(value, depth)
continue
iterate(d)
print(keys_list)
Вывод:
[('12', 0), ('3', 0), ('8', 0), ('12', 1), ('25', 1)]
Это дает список кортежей, где первое значение в каждом кортеже является ключом, а второе значение является глубиной.
РЕДАКТИРОВАТЬ
приведенный ниже код должен охватывать различные случаи более надежно, чем код выше (но я изменил ваш несколько итеративная функция):
d = {"12": "a",
"3": "b",
"8": {
"12": "c",
"25": "d"
},
"test":"a"
}
KEYS = []
DEPTH = 0 # keep counter updated globally too
def iterate(dictionary):
global DEPTH
for key, value in dictionary.items():
KEYS.append((key, DEPTH))
if isinstance(value, dict):
DEPTH += 1
iterate(value)
DEPTH = 0
iterate(d)
print(KEYS)
Вывод:
[('12', 0), ('3', 0), ('8', 0), ('12', 1), ('25', 1), ('test', 0)]