Лучший способ переназначения элементов в каждом объекте json в массиве json

#python #json

Вопрос:

У меня есть массив json, который выглядит следующим образом:

 {'1': {'ID': '1', ' ': 'Aaron K###', 'Distributor': 'National Energy', 'State': 'BC', 'Brand': 'Trane', 'Cell': '778-###-####', 'email address': '', 'Notes': '', '': ''}, '2': {'ID': '2', ' ': 'Martin', 'Distributor': 'Pierce Phelps', 'State': 'PA', 'Brand': 'Bryant/Carrier', 'Cell': '267-###-####', 'email address': '', 'Notes': '', '': ''},...  

и я хотел перенастроить его так, чтобы он соответствовал формату сериализации django.

Я написал эту функцию, чтобы это сделать:

 def re_serialize_reg_json():  d = load_file()  for i in d:  d[i]['Name'] = d[i][' ']  d[i]['pk'] = d[i]['ID']  d[i]['model'] = 'homepage.territorymanager'   d[i]['fields'] = {  'Name' : d[i]['Name'],  'Cell' : d[i]['Cell'],  'Email Address' : d[i]['email address'],  'Notes' : d[i]['Notes'],  'Distributor' : d[i]['Distributor'],  'State' :d[i]['State'],  'Brand' :d[i]['Brand'],  }  del d[i][' ']  del d[i]['ID']  del d[i]['Name']  del d[i]['Cell']  del d[i]['email address']  del d[i]['Notes']  del d[i]['Distributor']  del d[i]['State']  del d[i]['Brand']  del d[i]['']  

и это отлично работает: вывод:

 {'1': {'pk': '1', 'model': 'homepage.territorymanager', 'fields': {'Name': 'Aaron Kirkus', 'Cell': '778-875-4983', 'Email Address': '', 'Notes': '', 'Distributor': 'National Energy', 'State': 'BC', 'Brand': 'Trane'}}, '2': {'pk': '2', 'model': 'homepage.territorymanager', 'fields': {'Name': 'Aaron Martin ', 'Cell': '267-246-0522', 'Email Address': '', 'Notes': '', 'Distributor': 'Pierce Phelps', 'State': 'PA', 'Brand': 'Bryant/Carrier'}},...  

Но я чувствую, что это не очень эффективный метод для достижения этого. Любые идеи оценены по достоинству.

Комментарии:

1. попробуйте создать новый диктант, так как это будет намного быстрее, чем добавлять новые значения в существующий, а затем удалять ненужные строки.

2. Сделайте d[i] = {'Name': d[i][' '], 'pk': d[i]['ID'], ...} и избавьтесь от всех del линий.

3. Это просто плохая идея с несколькими del утверждениями подряд. Я никогда раньше не видел такого подхода к дизайну tbh.

Ответ №1:

Список для хранения некоторых ключей и некоторого цикла сделал бы код намного приятнее

 def re_serialize_reg_json(d):  for key, values in d.items():  values.update({'Name': values[' '], 'pk': values['ID'], 'model': 'homepage.territorymanager'})  f = ['Name', 'Cell', 'email address', 'Notes', 'Distributor', 'State', 'Brand']  values['fields'] = {' '.join(w.capitalize() for w in k.split()): values[k] for k in f}  for k in f   [' ', '', 'ID']:  del values[k]  return d  

Комментарии:

1. Спасибо! Это очень полезно!