Pythonでは、ある辞書のキーとしてリストを使いたいときには、そのリストを不変でありハッシュ可能なタプルにすることができます。Pythonのfree-dictタイプの回避策?
>>> a = {}
>>> a[tuple(list_1)] = some_value
>>> a[tuple(list_2)] = some_other_value
あなたがを使用したい場合、同じ問題が発生したが、いくつかの辞書のキーとしてオブジェクトを設定する - あなたは再び不変であり、したがってハッシュ可能ですのfrozensetを構築することができます。
>>> a = {}
>>> a[frozenset(set_1)] = some_value
>>> a[frozenset(set_2)] = some_other_value
しかし、辞書には同等のものはないようです。
私が考えた(そして最終的には悪いと思った)最初の考えは、str(some_dict)
をキーとして使用することです。ただし、辞書は常に異なるハッシュ関数を使用するため、同じ辞書の文字列は異なる場合があります。
良い習慣として知られている回避策はありますか、他の辞書のキーとして辞書のようなオブジェクトを使用する方法を知っている人はいませんか?
あなたは 'collections.OrderedDict'に対して' str() 'を呼び出すことができますか? –
関連:http://stackoverflow.com/q/30637306/674039 – wim
@SimeonVisser OrderedDict:要素がディクテーションの値の一部として追加された順序を考慮しない限り、あなたは取得する動作に驚くかもしれません - 私は、OrderedDictがキーで順序付けられたツリーマップだと想像していましたが、悲しいかなか(このユースケースでは)そうではありません。 – phlip