gpt4 book ai didi

python - 询问 "is hashable"有关 Python 值的信息

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:28 24 4
gpt4 key购买 nike

我有兴趣获取任意字典并将其复制到新字典中,并在此过程中对其进行变异。

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

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

是否有一种干净的方法来执行此操作,涉及捕获异常并解析消息字符串以获取“不可散列类型”?

最佳答案

Python 3.x

使用collections.abc.Hashabletyping.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 :

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

__hash__ 的文档中也简要提到了这种方法。 .

Doing so means that not only will instances of the class raise an appropriate TypeError when a program attempts to retrieve their hash value, but they will also be correctly identified as unhashable when checking isinstance(obj, collections.Hashable) (unlike classes which define their own __hash__() to explicitly raise TypeError).

关于python - 询问 "is hashable"有关 Python 值的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com