3

I know this is possible with list comprehension but I can't seem to figure it out. Currently I have a list of dictionaries like so:

 [ {'field1': 'a', 'field2': 'b'},
   {'field1': 'c', 'field2': 'd'},
   {'field1': 'e', 'field2': 'f'} ]

I'm trying to turn this into:

list = [
    ['b', 'a'],
    ['d', 'c'],
    ['f', 'e'],
]
davegri
  • 2,206
  • 2
  • 26
  • 45

4 Answers4

5

You can try:

[[x['field2'], x['field1']] for x in l]

where l is your input list. The result for your data would be:

[['b', 'a'], ['d', 'c'], ['f', 'e']]

This way you ensure that the value for field2 comes before the value for field1

JuniorCompressor
  • 19,631
  • 4
  • 30
  • 57
4

Just return the dict.values() lists in Python 2, or convert the dictionary view to a list in Python 3:

[d.values() for d in list_of_dicts]  # Python 2
[list(d.values()) for d in list_of_dicts]  # Python 3

Note that the values are not going to be in any specific order, because dictionaries are not ordered. If you expected them to be in a given order you'd have to add a sorting step.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
0

I'm not sure what ordering you want, but for no order you could do:

list_ = [list(_.values()) for _ in dict_list]
CrazyCasta
  • 26,917
  • 4
  • 45
  • 72
0

You can use list comprehension

Python 3

>>>listdict = [ {'field1': 'a', 'field2': 'b'},
...             {'field1': 'c', 'field2': 'd'},
...             {'field1': 'e', 'field2': 'f'} ]

>>>[[a for a in dict.values()] for dict in listdict]
[['b', 'a'], ['d', 'c'], ['f', 'e']]

Python 2

>>>[dict.values() for dict in listdict]
[['b', 'a'], ['d', 'c'], ['f', 'e']]
user3636636
  • 2,409
  • 2
  • 16
  • 31