创建一个“压缩”字典

时间:2019-01-07 21:48:20

标签: python dictionary dictionary-comprehension

我有一个python字典,希望根据这些键压缩成不同的字典:

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

在这篇文章中,我的关键字是自动表单字段名称,并且按“ _ ”之后提供的数字分组:field1_0field2_0分组和{{1 }},field1_1由于尾号而被分组。

我想把它们组合在一起,然后将它们组合成一个键值对字典,其中每个分组项的值都在新字典中。

例如,以上面的格为例。我想要一个像这样的字典:

field2_1

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

1 个答案:

答案 0 :(得分:4)

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