#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. Спасибо! Это очень полезно!