前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
Pythonの問題と言うより日本語の問題ですね。
『リスト、辞書、集合は他の辞書のキーになれない』
これは、
『リストは辞書のキーになれない』
『集合は辞書のキーになれない』
『辞書は(他の)辞書のキーになれない』
を1文にした物です。これで分かりますでしょうか?
投稿2020/11/27 12:30
総合スコア85893
0
otnさんの補足になります。
たまたま、「入門python3」が手元にあったので久々に読んでみました。「3.7 もっと大きいデータ構造」の箇所は引用すれば「制限は、データ型自体にある。たとえば、辞書のキーはイミュータブルでなければならない。そのため、リスト、辞書、集合は他の辞書のキーになれない。しかし、タプルはキーになれる」が元です。
そこで、いろいろと実験(ipythonで)してみました。これで理解が深まれば幸いです。
In [6]: your_dict_on_tuple = {the_tuple: 'on_tiple'}でエラーにならないのはOKだからです。
python
1In [1]: the_list = [1, 'a'] 2 3In [2]: the_tuple = 1, 'a' 4 5In [3]: the_dict = {1: '1', 'a': 'a'} 6 7In [4]: your_dict_on_list = {the_list: "on_list"} 8--------------------------------------------------------------------------- 9TypeError Traceback (most recent call last) 10<ipython-input-9-5c394629b423> in <module> 11----> 1 your_dict_on_list = {the_list: "on_list"} 12 13TypeError: unhashable type: 'list' 14 15In [5]: your_dict_on_dict = {the_dict: 'on_dict'} 16--------------------------------------------------------------------------- 17TypeError Traceback (most recent call last) 18<ipython-input-10-4295882fd0d0> in <module> 19----> 1 your_dict_on_dict = {the_dict: 'on_dict'} 20 21TypeError: unhashable type: 'dict' 22 23In [6]: your_dict_on_tuple = {the_tuple: 'on_tiple'} 24 25In [7]:
投稿2020/11/27 13:12
編集2020/11/27 13:13総合スコア1167
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
簡単に言うと、list、dict、set は dict のキーとして使えないということです。
lst = [1, 2, 3] dct = {"a": 1, "b": 2} sets = {1, 2, 3} dct2 = {lst: 1} # TypeError: unhashable type: 'list' dct2 = {dct: 1} # TypeError: unhashable type: 'dict' dct2 = {sets: 1} # TypeError: unhashable type: 'set'
なぜ使えないかというと、これらのクラスはオブジェクトを作成したあとから要素を追加、削除して中身を自由に変えられるため (mutable)、中身が一意に定まらず、ハッシュ化できないからです。
unhashable type
= ハッシュ化できない型
投稿2020/11/27 12:29
編集2020/11/27 12:31総合スコア21956
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
オライリージャパン出版の入門python3の(3、7もっと大きいデータ構造)の文中で『リスト、辞書、集合は他の辞書のキーになれない』ここでの”他の辞書”ってどういう意味ですか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/27 12:34