-3

重複の可能性:
辞書のキーとしてのリスト

myDict = {}、それではmyDict[['a', 'b']] = 'foo'合法的なPython式ですか?

4

4 に答える 4

3

そうではない。迷ったらやってみる!このコードを実行すると、以下が生成されます。

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'

コードはディクショナリを作成し、リストをキーとしてディクショナリに要素を格納しようとします。残念ながら、リストは辞書の有効なキーではありません:-)

于 2012-11-02T01:23:26.117 に答える
2

いいえ。リストはハッシュ化できないため、辞書キーにすることはできません。

使用できます

myDict['a', 'b'] = 'foo'

タプルを使用するため

于 2012-11-02T01:21:30.660 に答える
2

いいえ、そうではありません。リストをキーとして使用しようとしているため、エラーが発生します。辞書ではキーとして不変オブジェクトのみが許可されるため、ここではタプルを使用する必要があります。

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'}
于 2012-11-02T01:21:47.040 に答える
0

リストはディクショナリのキーにすることはできないため(変更可能であるため)、合法ではありません。しかし、タプル (不変) は次のことができます。

>>> 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'}
于 2012-11-02T01:25:13.090 に答える