Как мне получить ключ из словаря numpy.array() в python

#python #dictionary #data-structures

#python #словарь #структуры данных

Вопрос:

У меня есть словарь, в котором в качестве значений используется numpy.array():

 dictionary = {0: array([11,  0,  2,  0]), 1: array([  2,   0,   1, 100]), 1: array([  5,   10,   1, 100])}
  

Я хочу получить ключ определенного значения, например: [11, 0, 2, 0]. Итак, я написал этот код:

 print(list(a_dictionary.keys())[list(a_dictionary.values()).index([11,  0,  2,  0])]) 
  

Но это выдает мне ошибку: ValueError: значение истинности массива с более чем одним элементом неоднозначно. Используйте.any() или.all()

Как с этим справиться? Есть ли какой-либо другой способ получить ключ определенного значения списка в словаре?

Ответ №1:

Вы можете использовать np.array_equal , чтобы проверить, равны ли два массива numpy. Следующий код будет установлен key_needed на ключ в словаре, если элементы совпадают, если нет значения с этим массивом numpy key_needed None .

Если существует несколько ключей, которые имеют один и тот же массив numpy, это вернет только первое вхождение.

 import numpy as np

d={0: np.array([11,  0,  2,  0]), 1: np.array([  2,   0,   1, 100]), 1: np.array([  5,   10,   1, 100])}

value_to_search=[11, 0, 2, 0]

value_to_search=np.array(value_to_search)

key_needed=None

for key in d:
    if np.array_equal(d[key],value_to_search):
        key_needed=key
        break

print(key_needed) # 0
  

Комментарии:

1. np :), если вам нужна однострочная версия, в которой значения массива могут быть в нескольких ключах, вы можете попробовать это key_needed=[k for k,v in d.items() if np.array_equal(v,value_to_search)] . Пустой список [] , если значения отсутствуют, и список с ключами, если ключи дублируются.