Использование набора целых чисел в качестве ключа в Python не работает - PullRequest
0 голосов
/ 01 мая 2018

У меня есть словарь, в котором я храню кортеж (x, y) в качестве ключа

Однако, когда я помещаю следующее условие, оно возвращает true, даже если кортеж уже есть в словаре.

            if (virtual_box_i, virtual_box_j) not in self.visitid_indices:
                break

Я уверен, что кортеж есть, как я вижу в self.visitid_indices при отладке, как показано ниже:

enter image description here

Что может быть я тут не так делаю?

1 Ответ

0 голосов
/ 01 мая 2018

Ваше изображение выглядит как virtual_box_i/j, равное int64, что может указывать на тип NumPy. Целые числа типа NumPy (к сожалению или нет) такие же, как и обычные целые числа. Попробуйте использовать

(int(virtual_box_i), int(virtual_box_j))

вместо этого, чтобы явно преобразовать (предполагаемые) целые числа NumPy в стандартные целые числа Python.


Обратите внимание, что в Python 2.7.13 и NumPy 1.13.1 я не могу воспроизвести проблему:

Python 2.7.13 (default, Feb  1 2017, 17:19:54) 
[GCC 5.4.1 20160904] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {(1, 2L): 'test'}
>>> x = 1
>>> y = 2L
>>> (x, y) in d
True
>>> (x, 2) in d
True
>>> import numpy as np
>>> a = np.int64(1)
>>> b = np.int64(2)
>>> (a, b) in d
True
>>> np.__version__
'1.13.1'

Как уже упоминалось в комментариях, сравнения с np.int64 оцениваются правильно, даже когда ключ состоит из целых или длинных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...