-2

I need to convert this object unicode or str to list/array of dict, the input data is:

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

Is a column of csv, I import this with PANDAS, but I need something similar to array of dict for processing

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

Thanks.

German Avalos
  • 53
  • 2
  • 9

1 Answers1

0

If "[('ALMAFUERTE', 328), ('ALAMAFUERTE', 1), ('ALMFUERTE', 1), ('ALMZFUERTE', 1)]" is your input, you need to turn it into a list using the eval() method.

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

Then you can do this:

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

If you are using a pandas DataFrame that is structured like this:

>>> 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

You can do this:

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

>>> print(d)
[{'ALMAFUERTE': 328}, {'ALAMAFUERTE': 1}, {'ALMFUERTE': 1}, {'ALMZFUERTE': 1}]
brandonwang
  • 1,603
  • 10
  • 17
  • It's perfect if the data type is a list, but I need to convert my data type to list, and when I list (l) it returns this: ['[', '(', "'", 'A', 'L', 'M', 'A', 'F', 'U', 'E', 'R', 'T', 'E', "'", ',', ' ', '3', '2', '8', ')', ',', ' ', '(', "'", 'A', 'L', 'A', 'M', 'A', 'F', 'U', 'E', 'R', 'T', 'E', "'", ',', ' ', '1', ')', ',', ' ', '(', "'", 'A', 'L', 'M', 'F', 'U', 'E', 'R', 'T', 'E', "'", ',', ' ', '1', ')', ',', ' ', '(', "'", 'A', 'L', 'M', 'Z', 'F', 'U', 'E', 'R', 'T', 'E', "'", ',', ' ', '1', ')', ']'] the type inport is – German Avalos Aug 13 '18 at 23:46
  • If the input is a string, you can use the `eval()` method. I'll edit my answer. – brandonwang Aug 13 '18 at 23:51
  • Thanks Brandom, with eval() works perfectly. Thank you very much!! – German Avalos Aug 13 '18 at 23:55
  • @user3483203 what is a reason? – German Avalos Aug 13 '18 at 23:55
  • @GermanAvalos they might be referring to this [Why is using 'eval' a bad practice?](http://stackoverflow.com/questions/1832940/why-is-using-eval-a-bad-practice) – chickity china chinese chicken Aug 14 '18 at 00:32