Python TypeError: Unhashable タイプ: リスト

Zeeshan Afridi 2023年6月21日
  1. Python の TypeError: unhashable type: 'list'
  2. Python のハッシュ関数
  3. Python の TypeError: unhashable type: 'list' を修正
Python TypeError: Unhashable タイプ: リスト

この記事では、TypeError: unhashable type: 'list' と、それを Python で修正する方法について説明します。

Python の TypeError: unhashable type: 'list'

このエラーは、リストなどのハッシュ不可能なオブジェクトをキーとして Python 辞書に渡したり、関数のハッシュ値を検索したりするときに発生します。

Dictionaries は Python のデータ構造であり、キーと値のペアで機能します。すべてのキーにはそれに対する値があり、値の値にアクセスするには、配列インデックスなどのキーが必要です。

辞書の構文:

dic = {"key": "Values"}

ハッシュ可能なオブジェクトは、値が時間の経過とともに変化せず、同じままであるオブジェクトです tuplesstrings は、ハッシュ可能なオブジェクトのタイプです。

コード:

# 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() 関数は、指定されたオブジェクトのハッシュ値を見つけるために使用されますが、オブジェクトは stringtuple などのように不変でなければなりません。

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() 関数が tuplestring などの可変オブジェクトで完全に機能することに注意してください。

辞書の TypeError: unhashable type: 'list' を修正する方法を見てみましょう。

コード:

# creating a dictionary
dic = {
    # string as key
    "a": [1, 2]
}

print(dic)

出力:

{'a': [1, 2]}

今回は、文字列 "a" をキーとして提供します。これは、strings が変更可能であるため、うまく機能します。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error

関連記事 - Python TypeError