字典强制是有意还是无意?

2024-02-09

如果我写:

d = { 0:'a', 1:'b' }
d[False] = 'c'
d[True] = 'd'
print(d)

I get:

{ 0:'c', 1:'d' }

为什么它强迫它们变成整数?它反过来做同样的事情。

d = {False:'a', True:'b'}
d[0] = 'c'
d[1] = 'd'
print(d)

输出是:

{False:'c', True: 'd'}

可以禁用此功能吗?这是一个错误吗?


这是因为这些值被认为是相等的:

>>> True == 1
True
>>> 
>>> False == 0
True

并具有相同的哈希值:

>>> hash(True), hash(1)
(1, 1)
>>> 
>>> hash(False), hash(0)
(0, 0)

因此,从字典的角度来看,True and 1无法区分False and 0.

没有办法“禁用”它——你不应该在字典中使用非同质键。

在这种特定情况下,一个潜在的解决方法是保留特殊的 int 值True and False以外1 and 0,分别(假设您需要1 and 0作为独立键)。例如,你可以有-1代表True and -2代表False.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字典强制是有意还是无意? 的相关文章

随机推荐

  • 如何检测 WiFi 网络共享状态

    我想知道如何检测 WiFi 网络共享的状态 我看过一篇文章 Android 2 3 wifi热点API https stackoverflow com questions 7048922 android 2 3 wifi hotspot a
  • 检查字符串是否在 python 中的 2 GB 字符串列表中

    我有一个大文件 A txt 2 GB 包含字符串列表 Question Q1 Q2 Q3 Ans1 Format links 现在我有另一个更大的文件 1TB 其中第二个位置包含上述字符串 Output a Question b The q
  • Java 8 流 - 对象的总和

    假设我有一个实现以下接口的对象列表 public interface Summable
  • Pytorch 张量索引:如何通过包含索引的张量收集行

    我有张量 ids 形状 7000 1 包含索引 例如 1 0 2 x 形状 7000 3 255 ids张量编码粗体标记维度的索引x应该选择哪个 我想将选定的切片收集到结果向量中 result 形状 7000 255 背景 我对这 3 个元
  • 关于 Arm 处理器上的 conda 发行版/通道的混乱

    我已经使用 Anaconda 几年了 但自从我开始使用带有 M1 处理器的 Mac 以来 我不得不处理一些软件包安装的一系列问题 这让我对一些基本概念有点困惑 例如 我试图安装 Tensorflow 结果发现正确的方法是安装 minifor
  • 使用 psycopg 准备的语句

    我是 python 的初学者 我们使用此代码来执行 SQL 命令 cur execute INSERT INTO test num data VALUES s s 100 abcdef 我想知道这是准备好的声明还是只是客户端引用 不 不是
  • 为什么使用隐式解包或强制解包让应用程序在某个阶段崩溃没有好处?

    我的观点是 在某些地方 我们知道该变量根本不会为零 但由于某种原因 我们无法在类的 init 函数中实例化它 因此我们必须将其设为可选 我也知道我们可以使用可选的绑定或防护技术来轻松摆脱它 但在我看来 由于隐式解包 强制解包而让应用程序因一
  • 在 asp.net 中使用对象标签

    我有这个 html 代码 用于在 aspx 页面中嵌入视频
  • Java 线程和核心数

    我只是有一个关于处理器和线程如何工作的快速问题 根据我目前的理解 一个核心一次只能执行1个进程 但是我们能够生成一个数量大于我们拥有的核心数量 假设为 4 的线程池 假设为 30 并让它们同时运行 如果我们只有 4 个核心 这怎么可能 我还
  • 如何让onDragListener和onTouchListener协同工作?

    我使用 onDragListener 在屏幕上拖动一个对象 这部分效果很好 但我还需要在拖动时检查屏幕的 x y 坐标 我重写了 onTouch 方法 它也运行良好 但是一旦我拖动对象 ontouch 侦听器就不起作用 我无法让两个听众一起
  • Android 5.0 模拟器显示存储空间耗尽

    我刚刚将 Android SDK 更新到版本 21 并尝试启动模拟器 我使用的是 Nexus 4 其 CPU Intelatom x86 768 RAM 和 524 内部存储 模拟器启动正常 但显示错误消息 存储空间耗尽 并且速度非常慢 我
  • 如何在安全沙箱中运行不受信任的 Ruby 代码?

    我希望能够运行不受信任的 ruby 代码 我希望能够将变量传递给它可能使用的不受信任的代码 我还希望上述代码返回结果给我 这是我的想法的一个概念示例 input sweet output nil Thread start SAFE 4 un
  • PHP - array_map 比 foreach 更快吗? [复制]

    这个问题在这里已经有答案了 就性能而言 哪个是更好的选择 在对象中时 Case 1 public function test array return array map array this do something to element
  • clang 似乎使用 gcc 库

    这是我第一次使用clang 我注意到 clang 引用 std 库的任何错误都如下所示 usr bin lib gcc x86 64 linux gnu 4 8 include c 4 8 ostream 245 7 所以它看起来像 cla
  • C++:在堆栈中存储结构

    我有一个结构 struct Vehicle char ad Arrival departure char string license license value int arrival arrival in military time 我
  • 如何用C语言创建UDP服务器?

    我正在尝试用 C 语言 在 Linux 下 编写一个 UDP 服务器 我知道在socket 我必须使用的功能SOCK DGRAM并不是SOCK STREAM if list s socket AF INET SOCK DGRAM IPPRO
  • 消除 来自 python 字符串

    当你运行某件事时popen在 Python 中 结果来自缓冲区 每行末尾带有回车符 13 的 CR LF 十进制值 如何从 Python 字符串中删除它 你可以简单地做 s s replace r n n 将所有出现的 CRNL 替换为 N
  • 如何开发 Internet Explorer 附加组件

    我们可以为 IE 创建附加组件吗 如果是 我在哪里可以找到所需的资源 文档 一些参考资料 在 MSDN 博客上 编写 IE 插件 http blogs msdn com petel archive 2006 11 07 writing ie
  • 接收错误:无法连接到端口 7055 上的二进制 FirefoxBinary

    我正在使用 Maven 项目来运行 selenium 测试 但是当我运行测试文件时 我收到错误 无法连接到二进制 FirefoxBinary C Program Files x86 Mozilla Firefox firefox exe 端
  • 字典强制是有意还是无意?

    如果我写 d 0 a 1 b d False c d True d print d I get 0 c 1 d 为什么它强迫它们变成整数 它反过来做同样的事情 d False a True b d 0 c d 1 d print d 输出是