[Numpy-discussion] Efficiently converting numpy record array to a list of dictionary

Warren Weckesser warren.weckesser@enthought....
Thu Feb 4 18:10:50 CST 2010


Vishal,

Robert's code does the trick, but--in case you are new to numpy record 
arrays-I thought I'd point out that the array itself already acts like a 
list of dictionaries:

In [6]: import numpy as np

In [7]: dt = np.dtype([('name', 'S30'),('age',int),('weight',float)])

In [8]: r = np.array([('Bill',31, 260.0), ('Fred', 15, 145.0)], dtype=dt)

In [9]: r[0]['name']
Out[9]: 'Bill'

In [10]: r[1]['age']
Out[10]: 15


Warren




Robert Kern wrote:
> On Thu, Feb 4, 2010 at 16:26, Vishal Rana <ranavishal@gmail.com> wrote:
>   
>> How do I convert the numpy record array below:
>> recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)]
>> r = rec.fromrecords(recs, names='name, age, weight', formats='S30, i2, f4')
>> to a list of dictionary like:
>> [{'name': 'Bill', 'age': 31, 'weight': 260.0},
>> 'name': 'Fred', 'age': 15, 'weight': 145.0}]
>>     
>
> Assuming that your record array is only 1D:
>
> In [6]: r.dtype.names
> Out[6]: ('name', 'age', 'weight')
>
> In [7]: names = r.dtype.names
>
> In [8]: [dict(zip(names, record)) for record in r]
> Out[8]:
> [{'age': 31, 'name': 'Bill', 'weight': 260.0},
>  {'age': 15, 'name': 'Fred', 'weight': 145.0}]
>
>   



More information about the NumPy-Discussion mailing list