询问 Python 值“是否可散列”

2024-03-15

我感兴趣的是采用任意字典并将其复制到新字典中,并一路改变它。

我想做的一项改变是交换键和值。不幸的是,有些价值观本身就是命令。但是,这会生成“不可散列类型:'dict'”错误。我真的不介意只是将值字符串化并为其提供密钥。但是,我希望能够做这样的事情:

for key in olddict:
  if hashable(olddict[key]):
    newdict[olddict[key]] = key
  else
    newdict[str(olddict[key])] = key

有没有一种干净的方法可以做到这一点doesn't涉及捕获异常并解析消息字符串以获取“不可散列类型”?


Python 3.x

Use collections.abc.Hashable https://docs.python.org/3/library/collections.abc.html#collections.abc.Hashable or typing.Hashable https://docs.python.org/3/library/typing.html#typing.Hashable.

>>> import typing
>>> isinstance({}, typing.Hashable)
False
>>> isinstance(0, typing.Hashable)
True

注意:两者是相同的,后者只是前者的别名。另请注意collections.Hashable在 Python 3.10+ 中被删除(自 3.7 起已弃用)。

Python 2.6+(原始答案)

从Python 2.6开始你可以使用抽象基类collections.Hashable https://docs.python.org/2.7/library/collections.html#collections.Hashable:

>>> import collections
>>> isinstance({}, collections.Hashable)
False
>>> isinstance(0, collections.Hashable)
True

文档中也简要提到了这种方法__hash__ http://docs.python.org/reference/datamodel.html#object.__hash__.

这样做意味着该类的实例不仅会引发适当的TypeError当程序尝试检索其哈希值时,但在检查时它们也会被正确识别为不可哈希isinstance(obj, collections.Hashable)(与定义自己的类不同__hash__()明确提出TypeError).

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

询问 Python 值“是否可散列” 的相关文章

随机推荐

  • WCF 或 WSE 编辑安全标头

    我一直在尝试使用 WCF 或 WSE 更改肥皂安全元素 WCF 实现消息检查器并在 Beforerequestsent 中添加自定义代码 在后面的代码中设置以下自定义绑定后 我在参考 System ServiceModel Channels
  • 允许使用 itextsharp 在密码安全 pdf 中提取页面

    我不知道是否可以创建启用密码安全性的 pdf 并且还允许提取页面 我在 itextsharp 中没有找到任何允许启用页面提取的属性 有人有任何想法吗 这是我想要启用的属性 非常感谢 我查看了 ISO 32000 2 草案中的权限位 并将它们
  • @Autowired 说不建议进行现场注入[重复]

    这个问题在这里已经有答案了 谁能告诉我为什么 autowired 说不建议进行字段注入 并且 TextWriter 对象 文本 也说它无法自动装配 因为有多个文本编写器类型的 bean RestController public class
  • 如何在Java中解密aes-256-cbc

    我已经在 php ini 中对字符串进行了加密 从 php 和 node js 解密成功 另外还必须通过java来解密 帮我看一下java解密的例子吗 PHP 加密代码 encrypt encryption method aes 256 c
  • 更改 $*DISTRO 值以进行测试

    我需要测试一个功能包括这一行 https github com rakudo rakudo commit 0a2eef8fb0adb24164999a2b71c415fd11fe748a diff 4ce1542a6f014c9a003fe
  • jquery 深度链接 - 它如何影响分析?

    我正在考虑使用http www asual com jquery address http www asual com jquery address 但我想知道它如何影响谷歌分析 谷歌分析是页面底部的一段代码 我想深层链接仍然看起来像是初始
  • 生成球体的顶点

    在 DirectX 移动照明示例中 圆柱体是按以下方式生成的 for DWORD i 0 i lt 50 i FLOAT theta 2 D3DMX PI i 50 1 pVertices 2 i 0 position D3DMXVECTO
  • JavaScript 的类似 Python 的继承

    在 python 中我可以做这样的事情 main py class MainClass def init self self name some name def startDoingStuff self print I m doing s
  • 确定形成四边形的顶点顺序

    假设我在 2D 空间中有 4 个顶点 有谁知道一种有效的算法可以给我对应于简单四边形的顶点排序 也就是说 它将标记顶点1 2 3 4这样如果我跟随1 2 2 3 3 4我将绘制一个简单的 即不相交的 四边形 只需提供我可以谷歌搜索的标准算法
  • 如何在Java中实现Stream而不出现资源泄漏警告

    我希望实施Stream
  • C 是否具有函数参数名称的 __func__ 功能?

    C 标准是否支持类似的东西 func 对于函数参数的名称 不 C99标准有以下内容 6 10 8 预定义宏名称 以下宏名称应由实现定义 DATE FILE LINE STDC STDC HOSTED STDC MB MIGHT NEQ WC
  • 包括本地与远程 javascript 库

    我正在使用 jsSHA 1 3 1在这里下载 https github com Caligatio jsSHA downloads并用于我的本地主机上的学习项目 它给出的结果与我通过引用遥控器获得的副本略有不同 如下所示 现在 远程复制对我
  • 实例初始值设定项和*this*关键字[重复]

    这个问题在这里已经有答案了 尝试编译这段代码 public class Main public static void main String args new Main System out println x Error here in
  • Internet Explorer 中的淘汰赛验证错误?

    在我的剃刀观点中 使用knockout http knockoutjs com据说敲除验证 https github com ericmbarnard Knockout Validation我添加以下行 以实际开始使用 ko 验证 Scri
  • 并行运行过程 - Oracle PL/SQL

    我正在尝试使用 dbms scheduler 并行运行存储过程 Oracle PL SQL 但出现类似未知作业的错误 我也尝试过 dbms job 这里出现错误 必须声明标识符 dbms jobs 有人可以帮我吗 以下是我尝试过的两种方法
  • 如何制作 text-decoration: 下划线和 2px 填充?

    我喜欢听话的前端开发人员必须创建带有 2 像素填充的下划线 而不是默认的 1 像素 是否存在简单的解决方案 PS 是的 伙计们 我知道 div 具有黑色背景颜色和 1px Npx 和位置 相对 但它太慢了 对于交叉浏览 最好使用text u
  • 替换git中的master分支并防止快进

    我在 github 上有一个库 大约一年前 我完全重写了该应用程序 但不向后兼容 它位于一个名为 结构化 的分支上 现在大多数安装该库的人都在使用该分支 我想将其设为主分支并将当前主分支移至 旧版 我不希望使用旧主机的人能够快进到新主机 因
  • 如何使用 Seed.rb 有选择地填充开发和/或生产数据库?

    我正在使用 seeds rb 来填充我的开发和生产数据库 我通常用虚拟数据填充第一个 然后用我的应用程序运行所需的实际最小数据 例如第一个用户等 填充后者 如何在 Seed rb 中指定每个数据的环境 鉴于我知道 group 是一个 Gem
  • 何时应使用链表的现实世界示例有哪些?

    另一位程序员提到 在他的职业生涯中 他们还没有在任何专业软件中找到使用链表数据结构的用例 我一时想不出什么好的例子 他主要是 C 和 Java 开发人员 谁能举一些例子来说明这是解决特定现实世界问题的正确数据结构 Related 链表的实际
  • 询问 Python 值“是否可散列”

    我感兴趣的是采用任意字典并将其复制到新字典中 并一路改变它 我想做的一项改变是交换键和值 不幸的是 有些价值观本身就是命令 但是 这会生成 不可散列类型 dict 错误 我真的不介意只是将值字符串化并为其提供密钥 但是 我希望能够做这样的事