python 字典难题

2024-04-04

在控制台上我输入

>>> class S(str): pass
...
>>> a = 'hello'
>>> b = S('hello')
>>> d = {a:a, b:b}
>>> d
{'hello': 'hello'}
>>> type(d[a])
<class '__main__.S'>
>>> type(d[b])
<class '__main__.S'>

我一开始以为原因是d只保留了一对是因为hash(a) and hash(b)返回相同的值,所以我尝试:

>>> class A(object):
...     def __hash__(self):
...             return 0
... 
>>> class B(object):
...     def __hash__(self):
...             return 0
... 
>>> d = {A():A(),B():B()}
>>> d
{<__main__.A object at 0x101808b90>: <__main__.A object at 0x101808b10>, <__main__.B object at 0x101808d10>: <__main__.B object at 0x101808cd0>}

现在我很困惑。 为什么在第一个代码清单中,d只保留了一对,但在第二个列表中d尽管具有相同的哈希值,但两个密钥都被保留?


原始示例中的两个对象被折叠不是因为它们具有相同的哈希值,而是因为它们比较相等。字典键是唯一的equality,不是哈希。 Python 要求任何两个比较相等的对象必须具有相同的哈希值(但不一定相反)。

在第一个示例中,这两个对象是相等的,因为它们都具有str平等行为。由于两个对象比较相等,因此它们会合并为一个。在第二个示例中,它们比较不相等。默认情况下,用户定义的类使用标识来实现相等性——也就是说,每个对象仅与自身进行比较。所以你的两个对象不相等。它们具有相同的哈希值并不重要。

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

python 字典难题 的相关文章

  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • 如何在 Jupyter Notebook 中运行 Python 异步代码?

    我有一些 asyncio 代码在 Python 解释器 CPython 3 6 2 中运行良好 我现在想在具有 IPython 内核的 Jupyter 笔记本中运行它 我可以运行它 import asyncio asyncio get ev
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • Python 使用 Gstreamer 访问 USB 麦克风时遇到问题,以便在 Raspberry Pi 上使用 Pocketsphinx 执行语音识别

    所以Python的表现就好像它根本听不到我的麦克风发出的任何声音 问题就在这里 我有一个Python 2 7 假设使用的脚本Gstreamer通过以下方式访问我的麦克风并为我进行语音识别口袋狮身人面像 我在用着脉冲音频我的设备是树莓派 我的
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • Django - 提交具有同一字段多个输入的表单

    预警 我对 Django 以及一般的 Web 开发 非常陌生 我使用 Django 托管一个基于 Web 的 UI 该 UI 将从简短的调查中获取用户输入 通过我用 Python 开发的一些分析来提供输入 然后在 UI 中呈现这些分析的可视
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • 如何使用Python保存“完整的网页”而不仅仅是基本的html

    我正在使用以下代码来使用 Python 保存网页 import urllib import sys from bs4 import BeautifulSoup url http www vodafone de privat tarife r

随机推荐

  • 在强类型 MVC 视图用户控件中使用值类型

    我有一个具有以下基本结构的 MVC 用户控件 当我使用它时 它给出了这个错误消息 编译器错误消息 CS0452 类型 decimal 必须是引用 输入以便将其用作参数 泛型类型或方法中的 TModel System Web Mvc View
  • 如何使用 Nokogiri 访问属性

    我有一个访问某些属性的值的简单任务 这是一个简单的脚本 使用Nokogiri XML Builder创建一个简单的 XML 文档 require nokogiri builder Nokogiri XML Builder new encod
  • 如何在子线程中继续ThreadLocal的对象?

    我在 ThreadLocal 中传递了一个对象 现在我当前的线程将创建新的子线程 我希望 ThreadLocal 中的对象也应该继续使用子线程 有什么办法可以做到这一点吗 先感谢您 你需要的是一个InheritableThreadLocal
  • 这个计算 a^n 的算法是如何重写以在 O(log n) 时间内运行的?

    Suppose you want to compute an A simple algorithm would multiply a n times as follows result 1 for int i 1 i lt n i resu
  • TypeScript - 是否可以根据模式匹配甚至长度来验证字符串类型?

    考虑以下组件 它使用一个名为的库styled components创建一个预样式Text成分 const StyledText styled Text font family Roboto color props ITextProps gt
  • 通过 os.system('') 激活 VT100?

    在 Win10 conhost 获得 VT100 支持后 我尝试了一下它 最终我发现os system 激活Python中的支持并得到以下结果 import os print 033 36mTest 033 0m os system pri
  • 将逗号分隔的记录放入字符串数组中?

    我正在尝试读取一个 BufferedReader 它读取包含用逗号分隔的记录的文件 我想将每个字符串 或记录 拆分在两个逗号之间 去掉双引号 然后将每个字符串放入字符串数组的索引中 例如 假设我的文件中有这一行 0001 00203 824
  • 是否有用于带有数据 uri 的链接下载的 Polyfill?

    我有一些代码应该由服务器生成 a href teszt a 它适用于当前的 chrome firefox opera 我希望它支持 MSIE11 AFAIKmsSaveBlob是解决方案 是否有我可以使用的现有 js polyfill 或者
  • 处理 wicket 中 AutoCompleteTextField 的 onchange 事件

    我正在使用 Java 和 Wicket 为 Web 应用程序编写一个自动完成组件 当用户选择自动完成列表的选项之一时 有没有办法处理 onchange 事件来运行一些代码 我尝试在自动完成文本字段中执行此操作 setOutputMarkup
  • Jenkins 不等待 Docker 命令完成

    我试图让 Jenkins 在 Jenkins 从机上的 docker 中运行以下命令 docker run i v pwd opt myapp w opt myapp t mydockerimage bin bash c setup dev
  • MongoDB Atlas 搜索中多个文档具有相同的搜索分数

    有没有办法提高 Atlas 搜索中精确匹配的分数 我在获取 hi 从英语到法语的正确 最佳翻译时遇到问题 经过一番调试后 我发现从聚合返回的前三 3 个文档的得分相同 均为 2 362138271331787 我期望 hi 具有更高的分数
  • 如何在网页中打印适合纸张尺寸(A3、A4、A5 等)的图像?

    我目前正在使用 IE9 和媒体查询 我不需要在其他浏览器中使用此功能 我尝试使用一组规则 例如 page size auto margin 10mm 10mm 10mm 10mm 匹配所有 A 格式 A0 A1 A2 等 的毫米的规则 包括
  • 比较 LINQ-to-SQL 中的 byte[] 和使用模拟的单元测试

    我有以下方法 User IDataContext AuthenticateUser string userName string password byte hash PasswordHasher HashPassword userName
  • Solr 精确单词搜索

    我想配置我的 Solr 搜索引擎 以便获得与我输入的搜索词完全匹配的结果 例如 taxes 应该返回带有 taxes 的文档 而不是 tax taxation 等 任何帮助或提示将不胜感激 我假设您的字段是 TextField 默认情况下
  • PHPUnit:尝试@cover或@use不存在的方法

    我正在学习如何使用 PHPUnit 4 3 5 PHP 5 5 14 进行单元测试 一切都很顺利 直到我尝试获得代码覆盖率 我收到此错误 尝试获取代码覆盖率时尝试 cover 或 use 不存在的方法 MyClass construct 我
  • 使用 ASP.NET 4.5 发布配置文件时如何参数化部署?

    ASP NET 4 5 中的新 pubxml 文件绝对是朝着正确方向迈出的一步 我也喜欢msdeploy的支持parameters xml文件 尽管它们有时没有我想要的那么强大 现在 我该如何结合msdeploy的参数和 pubxml 文件
  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • Virtualenv 和 Anaconda 问题

    所以这个问题之前已经提出过 但我还没有找到合适的解决方案 我在Mac上 当我在终端中运行 python 时 我得到 Python 2 7 6 Anaconda 1 9 2 x86 64 default Jan 10 2014 11 23 1
  • 为什么建议在源文件末尾有空行?

    一些代码风格工具推荐这样做 我记得看到一些 unix 命令行工具警告缺少空行 多出一个空行的原因是什么 如果文本文件中的最后一行数据不是以换行符或回车符 换行符组合终止 许多旧工具会出现错误行为 他们忽略该行 因为它以 Z eof 结尾
  • python 字典难题

    在控制台上我输入 gt gt gt class S str pass gt gt gt a hello gt gt gt b S hello gt gt gt d a a b b gt gt gt d hello hello gt gt g