它显然有效,但是否存在两组相同元素恰好在 Dict 中添加两个条目的情况?我想我之前遇到了这种情况,并将我的代码从 frozenset(...)
更改为 tuple(sorted(frozenset(...)))
。知道 Dict 和 frozenset 实现方式的人可以确认是否需要这样做吗?
最佳答案
将 frozenset
用作 dict
键是否安全? 是的。
根据文档,Frozenset 是可哈希的,因为它是不可变的。这意味着它可以用作字典的键,因为键的先决条件是它是可哈希的。
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/