#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)]
. Пустой список[]
, если значения отсутствуют, и список с ключами, если ключи дублируются.