【问题标题】:Using tuple of integers as a key in python not working在python中使用整数元组作为键不起作用
【发布时间】:2018-04-30 23:42:20
【问题描述】:

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

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

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

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

我在这里做错了什么?

【问题讨论】:

  • 不确定图片是关于什么的,但很难阅读,强烈建议不要使用包含代码或(文本)输出的图片,因为屏幕阅读器无法搜索或阅读这些图片。
  • 你怎么知道条件被评估为“真”?
  • @mkrieger1 因为它进入了 if 条件
  • @Evert 你是对的。在将索引转换为 python int 之后,一切正常。奇怪的是 NumPy int 类型在这种情况下不起作用
  • 你能打印出(np.int64(2), np.int64(7)) in {(2,7)}吗?如果为 False,请列出您的平台、Python 版本和 numpy 版本,以及您如何安装它们。因为如果你有一个非常旧的 numpy 版本,或者一个损坏的 numpy 版本,你可能想要修复它,而不是解决这个特定的症状。

标签: python dictionary


【解决方案1】:

您的图像显示virtual_box_i/jint64,这可能表示 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'

如 cmets 中所述,与 np.int64 的比较即使在密钥由整数或长整数组成时也能正确评估。

【讨论】:

  • 为什么你认为用单键测试 dict 是一个有效的测试用例?
  • @HishamRagheb 如果密钥不在字典中,它将返回False。所以如果int、long和int64不匹配,返回值应该是False.
猜你喜欢
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2017-03-04
  • 1970-01-01
  • 2016-05-16
  • 2011-01-01
相关资源
最近更新 更多