興味深いものに出くわしたので、質問してみようと思いました。
に辞書を追加するset
と、辞書が完全な辞書として追加されると想定していましたが、そうではありません。キーのみが追加されます。
dicty = {"Key1": "Val1", "Key2": "Val2"}
setunion = set()
setunion.union(dicty)
=> set(['Key2', 'Key1'])
を使用して追加しようとするとset.add()
、エラーが発生します。
setadd = set()
setadd.add(dicty)
Traceback (most recent call last):
File "python", line 1, in <module>
TypeError: unhashable type: 'dict'
明らかに、この動作はリストとは大きく異なります。
listy = []
listy.append(dicty)
listy
=> [{'Key2': 'Val2', 'Key1': 'Val1'}]
ドキュメントでは、セットはハッシュ可能なオブジェクトの順序付けられていないコレクションであると述べられています。これは、上記の問題のいくつかへのヒントです。
質問
何が起きてる?セット項目はハッシュ可能である必要があるため、明らかに、キーを でセットに追加するだけである理由に関係しています.union()
が、なぜ ? でエラーが発生するの.add()
ですか?
リストからのセットの動作の違いの背後にある使いやすさの理由はありますか?
基本的にリストのように機能するが、一意のアイテムのみを保持するデータ型が Python (またはライブラリ) にありますか?