Search code examples
pythonnumpydictionarysparse-matrix

Getting a vector of dictionary values in an array, python


I am trying to get a vector of specific dictionary values which are in a numpy array. Here is what the array looks like:

import numpy as np
edge_array = np.array(
    [[1001, 7005, {'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}],
     [1001, 8259, {'lanes': 10, 'length': 0.46, 'type': '99', 'modes': 'cw'}],
     [1001, 14007, {'lanes': 7, 'length': 0.49, 'type': '99', 'modes': 'cw'}]])

I have a vector for the first two values of each row (i.e. 1001 and 7005, but I need another vector for the values associated with 'lanes'.

Here is my code so far:

row_idx = edge_array[:, 0]
col_idx = edge_array[:, 1]
lane_values = edge_array[:, 2['lanes']]

The error I get is as follows:

lane_values = edge_array[:, 2['lanes']]
TypeError: 'int' object has no attribute '__getitem__'

Please let me know if you need any further clarification, thanks!


Solution

  • The subexpression 2['lanes'] does not make sense: you are indexing into the number 2.

    Instead, try:

    [rec['lanes'] for rec in edge_array[:, 2]]
    

    Or:

    import operator
    map(operator.itemgetter('lanes'), edge_array[:,2])
    

    The above will give you a regular Python list; if you want a NumPy array you'll have to call np.array() on the list.

    But the better solution here is to transform your data into a "structured array" which has named columns and then you can index efficiently by name. If your array has many rows, this will have a big impact on efficiency.