JSON или CSV из списка на python

#python #arrays #json #python-3.x #list

#питон #массивы #json #python-3.x #Список

Вопрос:

Итак, у меня есть код, который преобразует мое дерево категорий в список, и я хотел преобразовать его в CSV/json. У каждого элемента в списке может быть больше идентификаторов, как показано ниже.

 def paths(tree):  tree_name = next(iter(tree.keys()))  if tree_name == 'children':   for child in tree['children']:  for descendant in paths(child):  yield (tree['id'],)   descendant  else:  yield (tree['id'],)      pprint.pprint(list(paths(tree)))   

Выход

 [(461123, 1010022280, 10222044, 2222871,2222890), (461123, 129893, 119894, 1110100250), (461123, 98943, 944894, 9893445), (461123, 9844495)]  

Есть ли какой-либо способ улучшить свой код или создать другой код, который преобразует список в json, который выглядит ниже вывода?

  Output should look like this {  {  "column1": "462312",  "column2": "1010022280",  "column3": "10222044",  "column4": "2222871",   "column5": "2222890"  },  {  "column1": "461123",  "column2": "129893",  "column3": "119894",  "column4": "1110100250"  }  and so on...  }   

если csv должен выглядеть так. ** Может быть до столбца 10

колонка1 колонка2 колонка3 колонка4
461123 129893 119894 1110100250
461123 129893 119894

Ответ №1:

Ниже приведен код для преобразования списка кортежей в список dict, который вы можете преобразовать в json, а вторая функция преобразует данные в csv

 data = [(461123, 1010022280, 10222044, 2222871,2222890), (461123, 129893, 119894, 1110100250), (461123, 98943, 944894, 9893445), (461123, 9844495)]  def convert_to_list_of_dicts(data):  output_list = []  for i in data:  data_dict = {}  for count,j in enumerate(i) :  data_dict["column"   str(count 1)] = j  output_list.append(data_dict)  return output_list  # print(convert_to_list_of_dicts(data))  def convert_to_csv(data):  max_column_num = 0  for i in data:  if len(i) gt; max_column_num:  max_column_num = len(i)  columns = ["column"   str(i 1) for i in range(max_column_num)]  newdata = [tuple(columns)]  for tup in data:  newdata.append(tup)  with open('output.csv', 'w', newline='') as csvfile:  writer = csv.writer(csvfile)  writer.writerows(newdata)  # convert_to_csv(data)