Commoner
Commoner

Reputation: 1768

Python: Conversion from dictionary to array

I have a Python dictionary (say D) where every key corresponds to some predefined list. I want to create an array with two columns where the first column corresponds to the keys of the dictionary D and the second column corresponds to the sum of the elements in the corresponding lists. As an example, if,

D = {1: [5,55], 2: [25,512], 3: [2, 18]}

Then, the array that I wish to create should be,

A = array( [[1,60], [2,537], [3, 20]] )

I have given a small example here, but I would like to know of a way where the implementation is the fastest. Presently, I am using the following method:

A_List = map( lambda x: [x,sum(D[x])] , D.keys() )

I realize that the output from my method is in the form of a list. I can convert it into an array in another step, but I don't know if that will be a fast method (I presume that the use of arrays will be faster than the use of lists). I will really appreciate an answer where I can know what's the fastest way of achieving this aim.

Upvotes: 4

Views: 25591

Answers (3)

AChampion
AChampion

Reputation: 30258

You can use a list comprehension to create the desired output:

>>> [(k, sum(v)) for k, v in D.items()]   # Py2 use D.iteritems()
[(1, 60), (2, 537), (3, 20)]

On my computer, this runs about 50% quicker than the map(lambda:.., D) version.
Note: On py3 map just returns a generator so you need to list(map(...)) to get the real time it takes.

Upvotes: 7

Ankur  Jyoti Phukan
Ankur Jyoti Phukan

Reputation: 806

You can try this also:

a=[]
for i in D.keys():
  a+=[[i,sum(D[i])]]

Upvotes: 2

EduGord
EduGord

Reputation: 159

I hope that helps:

  1. Build an array with the values of the keys of D:

    first_column = list(D.keys())
    
  2. Build an array with the sum of values in each key:

    second_column = [sum(D[key]) for key in D.keys()]
    
  3. Build an array with shape [first_column,second_column]

    your_array = list(zip(first_column,second_column))
    

Upvotes: 2

Related Questions