python - 使用 frozen set 作为 Dict 键是否安全?

标签 python python-2.7 hashmap frozenset

它显然有效,但是否存在两组相同元素恰好在 Dict 中添加两个条目的情况?我想我之前遇到了这种情况,并将我的代码从 frozenset(...) 更改为 tuple(sorted(frozenset(...)))。知道 Dict 和 frozenset 实现方式的人可以确认是否需要这样做吗?

最佳答案

frozenset 用作 dict 键是否安全? 是的。

根据文档,Frozenset 是可哈希的,因为它是不可变的。这意味着它可以用作字典的键,因为键的先决条件是它是可哈希的。

来自FrozenSet docs

The frozenset type is immutable and hashable — its contents cannot be altered after it is created; it can therefore be used as a dictionary key or as an element of another set.

并且多余地,来自 Dictionary docs :

...keys, which can be any immutable type


澄清一下,一组(根据定义),无论是否卡住,都不会保持顺序。它们在内部存储时不考虑顺序并删除了重复元素,因此以不同顺序构建的两个集合将是字典中的等效键——它们是相同的。

>>> frozenset([1,2,2,3,3]) == frozenset([3,2,1,1,1])
True

同样,

>>> d = {}
>>> d[frozenset([1,1,2,3])] = 'hello'
>>> d[frozenset([1,2,3,3])]
'hello'
>>> d[frozenset([3,3,3,2,1,1,1])]
'hello'
>>> d[frozenset([2,1,3])]
'hello'

关于python - 使用 frozen set 作为 Dict 键是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566797/

相关文章:

java - flex 不支持 HashMap 吗?

python - 将 float 转换为等效的四舍五入十进制数

python - 从 pandas 数据框中删除一组特定的过滤列中的空列

python - 通过使用 for 循环循环每个数据帧来处理数据帧

windows - Python - 在 Windows 中找不到 pip.ini 或 pip.conf

python - Python LinkedList 中的错误内存分配

java - 添加到一个 HashMap,其 Value 部分是另一个 HashMap

python - 为什么命名元组总是被 python 的 GC 跟踪?

python - 如何使用 cmd/Python 关闭 Internet 选项卡?

Java 哈希码和桶大小 - 关系