Python - Alternative for using numpy array as key in dictionary Python - Alternative for using numpy array as key in dictionary numpy numpy

Python - Alternative for using numpy array as key in dictionary


If you want to quickly store a numpy.ndarray as a key in a dictionary, a fast option is to use ndarray.tobytes() which will return a raw python bytes string which is immutable

my_array = numpy.arange(4).reshape((2,2))my_dict = {}my_dict[my_array.tobytes()] = None


After done some researches and reading through all comments. I think I've known the answer to my own question so I'd just write them down.

  1. Write a class to contain the data in the array and then override __hash__ function to amend the way how it is hashed as mentioned by ZdaR
  2. Convert this array to a tuple, which makes the list hashable instantaneously.Thanks to hpaulj

I'd prefer method No.2 because it fits my need better, as well as simpler. However, using a class might bring some additional benefits so it could also be useful.


I just ran into that issue and there's a very simple solution to it using list comprehension:

import numpy as npdict = {'key1':1, 'key2':2}my_array = np.array(['key1', 'key2'])result = np.array( [dict[element] for element in my_array] )print(result)

The result should be:

[1 2]

I don't know how efficient this is but seems like a very practical and straight-forward solution, no conversions or new classes needed :)