Как создать количество словарей на основе заданного числа в python? - PullRequest
1 голос
/ 17 апреля 2020

У меня есть страница HTML, которая обрабатывает несколько форм. При отправке почтового запроса (т.е. отправки значений полей различных форм) я получил в django / python этот словарь:

form-0-Name: Dupont form-0-Town: Paris form -1-Name: Macron form-1-Town: Marseille

Из этого словаря, как создать количество словарей на основе количества форм, которые я получаю? В этом примере я хотел бы создать два словаря с именами (form_0 и form_1), таких что form_0: {Имя: Дюпон, Город: Париж} и форма_1: {Имя: Макрон, Город: Марсель}.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Создайте вспомогательную функцию:

def get_form_dicts(form_dict):
    dictionaries = []
    form_strings = list(set([x[0:6] for x in form_dict.keys()]))
    for i in form_strings:
        dictionaries.append({x.split('-')[2]: v for x, v in form_dict.items() if i in x}) 

    return tuple(form_strings)

Теперь предположим, что вы знаете, сколько форм вы собираетесь получить:

# Naming django_dict the dict that is created in your application
form_0, form_1 = get_form_dicts(django_dict)
0 голосов
/ 17 апреля 2020

для dict как это:

a = {'form-0-Name':'Dupont', 'form-0-Town':'Paris', 'form-1-Name':'Macron','form-1-Town':'Marseille'}

Вы можете действовать следующим образом:

final = {}
for k,v in a.items():
    key = '_'.join(k.split('-')[:2])
    subkey = k.split('-')[-1]
    final.setdefault(key, {}).update({subkey:v})

вывод:

final = {'form_0': {'Name': 'Dupont', 'Town': 'Paris'},
 'form_1': {'Name': 'Macron', 'Town': 'Marseille'}}
...