我有兴趣采用任意指令并将其复制到新指令中,并在此过程中对其进行变异。
我想做的一种改变是交换键和值。不幸的是,有些值本身就是命令。但是,这会生成“不可散列类型:‘dict’”错误。我真的不介意将值字符串化并给它键。但是,我希望能够做这样的事情:
for key in olddict:
if hashable(olddict[key]):
newdict[olddict[key]] = key
else
newdict[str(olddict[key])] = key
有没有一种干净的方法可以做到这一点, 而不 涉及捕获异常和解析消息字符串以获取“不可散列类型”?
原文由 Paul Nathan 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 3.x
使用
collections.abc.Hashable
或typing.Hashable
。注:两者是同一个,后者只是前者的别名。另请注意
collections.Hashable
已在 Python 3.10+ 中删除(自 3.7 起已弃用)。Python 2.6+(原始答案)
从 Python 2.6 开始,您可以使用抽象基类
collections.Hashable
:__hash__
的文档中也简要提到了这种方法。