首页 > 解决方案 > 在python中使用整数元组作为键不起作用

问题描述

我有一本字典,其中存储了一个元组 (x,y) 作为键

但是,当我放置以下条件时,即使元组已经在字典中,它也会返回 true。

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

我确信元组在那里,因为我可以在 self.visitid_indices 中看到它,调试如下:

在此处输入图像描述

我在这里做错了什么?

标签: pythondictionary

解决方案


您的图像显示为virtual_box_i/jare 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如评论中所述,即使键由整数或长整数组成,与评估的比较也会正确。


推荐阅读