创建 "compressed" 字典

Creating a "compressed" dictionary

我有一个 python 字典,我想根据键将其压缩成不同的字典:

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

在这个 post 中,我的键是自动表单字段名称,它们按“_”之后提供的数字分组:field1_0field2_0被分组,field1_1field2_1因为尾数被分组。

我想采用它并组合这些分组元素并将它们压缩成一个键值对字典,其中分组项目的每个值都在新字典中。

例如上面的dict。我想要一个看起来像这样的字典:

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

关于我正在做的事情的上下文:我有一些动态 Django 表单,允许用户在我的项目中创建自定义报告。为此,我有 1 个表格,允许他们为他们想要的字段数输入一个数字。提交此表单时,动态表单会根据输入的元素数量创建 2 个字段(1 个用于字段名称,1 个用于数据类型,即 'field1_{x}': 'field name''field2_{x}':'datatype')。我将提交创建我们正在讨论的字典的提交,并将其传递到一个不同的动态表单中,该表单根据字段名称和数据类型创建字段,然后中提琴你有可以根据第 3 方声明创建的自定义表单。

假设字段连续编号且始终正确配对,您可以使用简单的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', 'FieldName2': 'DataType2'}