重複の可能性:
辞書のキーとしてのリスト
myDict = {}
、それではmyDict[['a', 'b']] = 'foo'
合法的なPython式ですか?
重複の可能性:
辞書のキーとしてのリスト
myDict = {}
、それではmyDict[['a', 'b']] = 'foo'
合法的なPython式ですか?
そうではない。迷ったらやってみる!このコードを実行すると、以下が生成されます。
dn52213m:~ austin$ python t.py
Traceback (most recent call last):
File "t.py", line 2, in <module>
myDict[['a', 'b']] = "foo"
TypeError: unhashable type: 'list'
コードはディクショナリを作成し、リストをキーとしてディクショナリに要素を格納しようとします。残念ながら、リストは辞書の有効なキーではありません:-)
いいえ。リストはハッシュ化できないため、辞書キーにすることはできません。
使用できます
myDict['a', 'b'] = 'foo'
タプルを使用するため
いいえ、そうではありません。リストをキーとして使用しようとしているため、エラーが発生します。辞書ではキーとして不変オブジェクトのみが許可されるため、ここではタプルを使用する必要があります。
In [9]: myDict = {}
In [10]: myDict[['a', 'b']] = 'foo' #error
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/monty/Desktop/<ipython console> in <module>()
TypeError: unhashable type: 'list'
#using a tuple, works fine
In [11]: myDict[('a', 'b')] = 'foo'
In [12]: myDict
Out[12]: {('a', 'b'): 'foo'}
リストはディクショナリのキーにすることはできないため(変更可能であるため)、合法ではありません。しかし、タプル (不変) は次のことができます。
>>> myDict={}
>>> myDict[['a','b']] = 'foo'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
これはあなたが望むものに近いかもしれません:
>>> myDict['a','b'] = 'foo'
>>> myDict[('a','b')] = 'foo' #same thing, slightly more explicit
>>> myDict
{('a', 'b'): 'foo'}