Создание «сжатого» словаря - PullRequest
0 голосов
/ 08 января 2019

У меня есть словарь Python, который я хочу сжать в разные dict на основе ключей:

{'field1_0': 'FieldName1', 'field2_0': 'DataType1', 
    'field1_1': 'FieldName 2', 'field2_1': 'DataType2'}

В этом посте мои ключи являются автоматическими именами полей формы и сгруппированы по цифрам, указанным после " _ ": field1_0, field2_0 сгруппированы и field1_1, field2_1 сгруппированы из-за конечного номера.

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

Например, возьмите вышеуказанный дикт. Я хочу диктовку, которая выглядит так:

{'FieldName1': 'DataType1', 'FieldName2': 'DataType2'}

Для контекста с тем, что я делаю: у меня есть несколько динамических форм Django, которые позволяют пользователям создавать собственные отчеты в моем проекте. Для этого у меня есть 1 форма, которая позволяет им ввести число для количества полей, которые они хотят. Когда эта форма отправляется, динамическая форма создает 2 поля на количество введенных элементов (1 для имени поля и 1 для типа данных, т.е. 'field1_{x}': 'field name' и 'field2_{x}':'datatype'). Я возьму это представление, которое создаст изложение, которое мы обсуждаем, и передам его в другую динамическую форму, которая создает поля на основе имени поля и типа данных, а затем у вас есть пользовательские формы, которые могут быть созданы на основе объявлений сторонних производителей.

1 Ответ

0 голосов
/ 08 января 2019

Предполагая, что поля постоянно пронумерованы и всегда правильно спарены, вы можете использовать простое dict понимание:

d = {'field1_0': 'FieldName1', 'field2_0': 'DataType1', 
     'field1_1': 'FieldName 2', 'field2_1': 'DataType2'}

new_d = {d[f'field1_{x}']: d[f'field2_{x}'] for x in range(len(d)//2)}

результат:

{'FieldName1': 'DataType1', 'FieldName 2': 'DataType2'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...