Строки номера:
def int_it(obj):
if obj.isdigit():
obj = int(obj)
return obj
Dict на номер (независимо от количества вложенной dicts или списков):
class Convert(object):
def __init__(self, obj):
self.obj = obj
if isinstance(obj, dict):
self.handle_dict(obj)
def handle_dict(self, obj):
for key, value in obj.items():
if isinstance(value, str) and value.isdigit():
self.obj[key] = int_it(value)
elif isinstance(obj[key], list):
ins = HandleList(obj[key])
self.obj[key] = ins.obj
elif isinstance(obj[key], dict):
ins = Convert(obj.items())
self.obj[key] = ins.obj
return obj
Список номеров, независимо от количества вложенных списков или dicts.
class HandleList(object):
def __init__(self, obj):
self.obj = obj
self.handle_list(obj)
def handle_list(self, obj):
for index, item in enumerate(obj):
if isinstance(item, list):
obj.index(index, [HandleList(val).obj for val in item])
elif isinstance(item, str):
obj.index(index, int_it(item))
elif isinstance(item, dict):
Convert(item)
return obj
output = Convert(values)
print(output.obj)
Возвращает:
{
'amarillo': 'xxx',
'naranja': [{'naranja_1': 1, 'naranja_2': 2}],
'rojo': [{'rojo_b': 2, 'rojo_a': 1}],
'azul': 4
}
Учитывая вход:
values = {
'azul':'4',
'rojo': [
{'rojo_a':'1',
'rojo_b':'2'
}
],
'amarillo':'xxx',
'naranja': [
{'naranja_1':'1',
'naranja_2':'2'
}
]
}
Можете ли вы показать нам именно то, что вы хотите, чтобы вывод ДИКТ выглядеть, учитывая ваш вклад? – glibdud
Я думаю, вы хотите '{k: int (v) if isinstance (v, str) и v.isdigit() else v для k, v в obj.items()}' – Lol4t0
@ Lol4t0 ... Я думаю, они хотят поведение для рекурсии в подвыборах и подсписок ... –