#python #python-3.x #serialization #sympy
#python #python-3.x #сериализация #симпатия
Вопрос:
Я получил образцы данных, подобные этому:
[1.212,3.54,[4.123],[5.5343],[[2,3.2],[9.345,4.102]]]
((1.41231,3.312),4.212,6.312)
["hello",1.232,"3.555"]
моя конечная цель — сериализовать эти данные, но некоторые данные в этих списках не относятся к типам python, например, python float—sympy.Core.Float , поэтому я должен прочитать эти многомерные массивы, узнать те числа, которые являются Sympy.core .Тип с плавающей запятой, затем выполняется преобразование типа следующим образом: «float (число)», так легко ли это закончить?
Вот часть кодов:
def RecursData(datas,final_list):
for index ,value in enumerate(datas):
if(isinstance(value,(tuple,list))):
tmp_data_list = list(value)
RecursData(tmp_data_list,final_list)
elif isinstance(value,(float,Float)):
final_list.append(float(value))
else:
final_list.append(value)
Ответ №1:
В вашем случае я бы сделал это:
your_data = [1.212,3.54,[4.123],[5.5343],[[2,3.2],[9.345,4.102]]]
def itter(lst):
end_goal = []
for x in lst:
if hasattr(x, '__iter__'):
end_goal.append(itter(x))
else:
# here do whatever you need to do
# so if you have to reconvert data
if isinstance(x,Float):
x = float(x)
end_goal.append(x)
return end_goal
# then just run the function/
print(itter(your_data))
это заменит все значения с плавающей запятой на значения с плавающей запятой python
Комментарии:
1.
data = [(1, Float(1.222222), 3), [1, 2, 3], (3, 4, 5), 5]
вывод:x= 1 end_gol= [1] x= 1.22222200000000 end_gol= [1, 1.22222200000000] x= 3 end_gol= [1, 1.22222200000000, 3] x= 1 end_gol= [1] x= 2 end_gol= [1, 2] x= 3 end_gol= [1, 2, 3] x= 3 end_gol= [3] x= 4 end_gol= [3, 4] x= 5 end_gol= [3, 4, 5] x= 5 end_gol= [5] [5] Process finished with exit code 0
, так как я мог его реорганизовать2. я не понимаю, что вы пытаетесь сделать, поэтому я использовал свою интуицию…. Я думаю, это то, что вы хотите… если я ошибаюсь, пожалуйста, объяснитесь