18

明らかに機能しますが、同じ要素の 2 つのセットがたまたま Dict に 2 つのエントリを追加する場合はありますか? frozenset(...)以前にこの状態になり、コードを からに変更したと思いますtuple(sorted(frozenset(...)))。Dictとfrozensetの実装が必要かどうかを確認する方法を知っている人はいますか?

4

3 に答える 3

29

a をキーfrozensetとして使用しても安全ですか? はい。dict

ドキュメントによると、Frozenset は不変であるためハッシュ可能です。キーの前提条件はハッシュ可能であるため、これは辞書のキーとして使用できることを意味します。

FrozenSet ドキュメントから

frozenset 型は不変かつハッシュ可能です — その内容は作成後に変更できません。したがって、辞書キーまたは別のセットの要素として使用できます。

そして重複して、Dictionary docsから:

...任意の不変型のキー


明確にするために、(定義により)セットは、凍結されているかどうかにかかわらず、順序を保持しません。これらは、順序を考慮せずに重複要素を削除して内部的に保存されるため、異なる順序で作成された 2 つのセットは、ディクショナリの同等のキーになります。それらは同じです。

>>> 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'
于 2015-02-17T17:03:20.197 に答える
8

公式ドキュメントから

frozenset 型は不変かつハッシュ可能です — その内容は作成後に変更できません。したがって、辞書キーまたは別のセットの要素として使用できます。

(強調は私です)

于 2015-02-17T17:04:11.387 に答える