是否可以从字符串数据列表中创建字典列表?

时间:2016-05-19 18:06:39

标签: python string list dictionary

我的输入列表属于以下类型(请注意,它包含空字符串):

Input = ['NO', 'Part Number', '1', '12334', '2', '45fd33', '']

我需要创建一个字典列表(如果忽略空字符串)

[
  {'NO': '1', 'Part Number': '12334'},
  {'NO': '2', 'Part Number': '45fd33'}
]

到目前为止我尝试过:

dict(enumerate(new_name_list, start=1))

并得到以下输出:

{1: 'NO', 2: 'Part Number', 3: '1', 4: '12334', 5: '2', 6: '45fd33', 7: ''}

如何从列表中获得预期输出并排除空字符串值?

1 个答案:

答案 0 :(得分:2)

你在这里问两个单独的问题。

要从列表中删除'',您可以将其传递到list comprehension

>>> Input = ['NO', 'Part Number', '1', '12334', '2', '45fd33','']
>>> Input_Changed = [i for i in Input if i!='']
>>> Input_Changed
['NO', 'Part Number', '1', '12334', '2', '45fd33']

字符串的语法遵循一般规则,即前两个的奇数元素应为NO,而偶数元素应为Part_Number

为此我们可以使用iter技巧:

>>> i = iter(Input_Changed[2:])
>>> [{Input_Changed[0]:x,Input_Changed[1]:y} for x,y in zip(i,i)]
[{'Part Number': '12334', 'NO': '1'}, {'Part Number': '45fd33', 'NO': '2'}]

主要思想是iter返回一个迭代器,因此每次传递元素时都会使用一个元素。因此,当zip(当您传递与两个参数相同的迭代器时返回相邻元素)时,您将获得所需的输出。