Python TypeError: Unhashable タイプ: リスト
-
Python の
TypeError: unhashable type: 'list'
- Python のハッシュ関数
-
Python の
TypeError: unhashable type: 'list'
を修正
この記事では、TypeError: unhashable type: 'list'
と、それを Python で修正する方法について説明します。
Python の TypeError: unhashable type: 'list'
このエラーは、リストなどのハッシュ不可能なオブジェクトをキーとして Python 辞書に渡したり、関数のハッシュ値を検索したりするときに発生します。
Dictionaries は Python のデータ構造であり、キーと値のペアで機能します。すべてのキーにはそれに対する値があり、値の値にアクセスするには、配列インデックスなどのキーが必要です。
辞書の構文:
dic = {"key": "Values"}
ハッシュ可能なオブジェクトは、値が時間の経過とともに変化せず、同じままであるオブジェクトです tuples
と strings
は、ハッシュ可能なオブジェクトのタイプです。
コード:
# creating a dictionary
dic = {
# list as a key --> Error because lists are immutable
["a", "b"]: [1, 2]
}
print(dic)
出力:
TypeError: unhashable type: 'list'
リスト ["a","b"]
を key
として使用しましたが、コンパイラは TypeError: unhashable type: 'list'
をスローしました。
リストのハッシュ値を手動で見つけてみましょう。
コード:
lst = ["a", "b"]
hash_value = hash(lst)
print(hash_value)
出力:
TypeError: unhashable type: 'list'
hash()
関数は、指定されたオブジェクトのハッシュ値を見つけるために使用されますが、オブジェクトは string
、tuple
などのように不変でなければなりません。
Python のハッシュ関数
hash()
関数は、不変オブジェクトを暗号化し、オブジェクトのハッシュ値と呼ばれる一意の値を割り当てる暗号化手法です。 データのサイズに関係なく、同じサイズの一意の値を提供します。
コード:
string_val = "String Value"
tuple_val = (1, 2, 3, 4, 5)
msg = """Hey there!
Welcome to DelfStack"""
print("Hash of a string object\t\t", hash(string_val))
print("Hash of a tuple object\t\t", hash(tuple_val))
print("Hash of a string message\t", hash(tuple_val))
出力:
Hash of a string object -74188595
Hash of a tuple object -1883319094
Hash of a string message -1883319094
ハッシュ値は同じサイズで、すべての値に対して一意です。
Python の TypeError: unhashable type: 'list'
を修正
Python で TypeError を修正するには、不変オブジェクトを辞書のキーおよび hash()
関数の引数として使用する必要があります。 上記のコードでは、hash()
関数が tuple
や string
などの可変オブジェクトで完全に機能することに注意してください。
辞書の TypeError: unhashable type: 'list'
を修正する方法を見てみましょう。
コード:
# creating a dictionary
dic = {
# string as key
"a": [1, 2]
}
print(dic)
出力:
{'a': [1, 2]}
今回は、文字列 "a"
をキーとして提供します。これは、strings
が変更可能であるため、うまく機能します。
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません