Python将复杂的字符串转换为字典列表

时间:2018-08-13 23:24:38

标签: python pandas numpy

我需要将此对象的unicode或str转换为字典的列表/数组,输入数据为:

[('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]

是csv的一列,我通过PANDAS导入,但是我需要类似于dict数组的内容进行处理

[{'ALMAFUERTE': 328}, {'ALAMAFUERTE': 1}, {'ALMFUERTE': 1}, {'ALMZFUERTE': 1}]

谢谢。

1 个答案:

答案 0 :(得分:0)

如果输入"[('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]",则需要使用eval()方法将其转换为列表。

>>> l = "[('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]"
>>> eval(l)
[('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]

然后您可以执行以下操作:

>>> l = [('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]
>>> [{i :j} for i, j in l]
[{'ALMAFUERTE': 328}, {'ALAMAFUERTE': 1}, {'ALMFUERTE': 1}, {'ALMZFUERTE': 1}]

如果您使用的熊猫数据框结构如下:

>>> l = [('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]
>>> df = pd.DataFrame(l, columns=['name', 'val'])
          name  val
0   ALMAFUERTE  328
1  ALAMAFUERTE    1
2    ALMFUERTE    1
3   ALMZFUERTE    1

您可以这样做:

>>> d = []
>>> for _, row in df.iterrows():
        d.append({row['name']:row['val']})

>>> print(d)
[{'ALMAFUERTE': 328}, {'ALAMAFUERTE': 1}, {'ALMFUERTE': 1}, {'ALMZFUERTE': 1}]