Python "TypeError: unhashable type: ‘dict’ " は、辞書を別の辞書のキーまたはコレクションの要素として使用するときに発生します。
このエラーを解決するには、代わりに frozenset
を使用するか、キーとして使用する前に辞書を JSON 文字列に変換する必要があります。
ある辞書を別の辞書のキーとして使用すると、エラーが発生します。
# ????️ using dictionary as a key in a dictionary # ⛔️ TypeError: unhashable type: 'dict' my_dict = {'name': 'Jiyik', {'country': 'China'}: 'address'}
または、set
オブジェクトの要素として辞書を使用する場合。
# ????️ 使用字典作为集合中的元素 # ⛔️ TypeError: unhashable type: 'dict' my_set = {{'name': 'Jiyik'}}
辞書オブジェクトは変更可能でハッシュ不可能であるため、辞書を辞書内のキーまたはコレクション内の要素として使用することはできません。
辞書を JSON 文字列に変換してエラーを解決します。
このエラーを解決する 1 つの方法は、辞書をキーとして使用する前に JSON 文字列に変換することです。
import json # ????️ 将字典转换为 JSON 字符串 my_json = json.dumps({'country': 'China'}) my_dict = {'name': 'Jiyik', my_json: 'address'} print(my_dict) # ????️ {'name': 'Jiyik', '{"country": "China"}': 'address'} # ????️ 当你必须访问字典中的键时 print(my_dict[json.dumps({'country': 'Austria'})]) # ????️ address
json.dumps
メソッドは、Python オブジェクトを JSON 形式の文字列に変換します。これが機能するのは、文字列が不変でハッシュ可能であるためです。
対照的に、json.loads
メソッドは、my_dict = json.loads(my_json_str)
など、JSON 文字列をネイティブ Python オブジェクトに解析します。
frozenset を使用したエラー解決
エラーを解決するもう 1 つの方法は、frozenset
を使用することです。
my_key = {'country': 'China'} key = frozenset(my_key.items()) print(key) # ????️ frozenset({('country', 'China')}) my_dict = {'name': 'Jiyik', key: 'address'} # ????️ 当我们必须访问 key 时 print(my_dict[frozenset(my_key.items())]) # ????️ 'address'
dict.items
メソッドは、辞書項目 ((キー、値) ペア) の新しいビューを返します。
# ????️ dict_items([('name', 'jiyik'), ('age', 30)]) print({'name': 'jiyik', 'age': 30}.items())
辞書の項目を使用して、辞書内のキー (および別のセットの要素) として使用できる frozenset
を作成します。
frozenset
は Python コレクション オブジェクトの不変バージョンであるため、辞書内のキーとして、または別のコレクション内の要素として使用できます。
辞書内のキーにアクセスするには、同じメソッドを使用する必要があることに注意してください。
frozenset(my_key.items()) を呼び出した結果を変数に保存し、ディクショナリ内のキーを設定またはアクセスするときにフローズンセットを再利用できます。
dict_key = {'id': 1, 'country': 'China'} # ✅ 转换为元组 my_tuple = tuple(dict_key) print(my_tuple) # ????️ ('id', 'country') my_dict = {'name': 'Jiyik', my_tuple: 'address'} print(my_dict) # ????️ {'name': 'Jiyik', ('id', 'country'): 'address'} # ????️ 当你必须访问字典中的键时 print(my_dict[my_tuple]) # ????️ address辞書をタプルに変換する場合、タプルには辞書のキーのみが含まれます。 タプルは不変であるため、辞書キーを含むタプルは別の辞書のキーとして安全に使用できます。 あるディクショナリを別のディクショナリの値として使用するディクショナリを別のディクショナリのキーとして使用することはできませんが、ディクショナリを値として使用することはできます。
dict_value = {'id': 1, 'country': 'China'} my_dict = {'name': 'Jiyik', 'data': dict_value} # ????️ {'name': 'Jiyik', 'data': {'id': 1, 'country': 'China'}} print(my_dict) print(my_dict['data']) # ????️ {'id': 1, 'country': 'China'}辞書を別の辞書の値に設定します。 制限はディクショナリ値には適用されないため、これは許可されます。 ある辞書のすべてのキーと値のペアを別の辞書に追加するある辞書のすべてのキーと値のペアを別の辞書に追加する必要がある場合は、for ループを使用できます。
another_dict = {'id': 1, 'country': 'China'} my_dict = {'name': 'Jiyik'} for key, value in another_dict.items(): my_dict[key] = value # ????️ {'name': 'Jiyik', 'id': 1, 'country': 'China'} print(my_dict)
dict.items メソッドは、辞書項目 ((キー、値) ペア) の新しいビューを返します。
my_dict = {'id': 1, 'name': 'Jiyik'} # ????️ dict_items([('id', 1), ('name', 'Jiyik')]) print(my_dict.items())各反復で、キーと値のペアを別の辞書に設定します。 Python のハッシュ可能オブジェクトとハッシュ不可能なオブジェクトPython の不変の組み込みオブジェクトのほとんどはハッシュ可能ですが、可変オブジェクトはハッシュ可能ではありません。
オブジェクトがハッシュ可能である場合、これらのデータ構造は内部でハッシュ値を使用するため、オブジェクトを辞書のキーおよびコレクションの要素として使用できます。ハッシュ可能なオブジェクトには、
str、int、bool、tuple、frozenset#が含まれます。 ##。 ハッシュ化できないオブジェクトには、
list、dict、set が含まれます。
hash()タプルと凍結セットは、その要素がハッシュ可能である場合にのみハッシュ可能であることに注意してください。
オブジェクトが組み込みのオブジェクトがハッシュ可能かどうかの確認
関数に渡すことで、オブジェクトがハッシュ可能かどうかを確認できます。
print(hash('jiyik.com')) # ????️ 4905958875846995527 # ⛔️ TypeError: unhashable type: 'dict' print(hash({'name': 'Jiyik'}))
ハッシュ値は、辞書検索中に辞書キーを比較するために使用される整数です。
!> ハッシュ可能オブジェクトのハッシュ値は、その存続期間中は決して変更されません。これが、ほとんどの不変オブジェクトがハッシュ可能であるのに対し、可変オブジェクトはハッシュ可能ではない理由です。
辞書のようなオブジェクトは、辞書の内容が変更される可能性があるため、変更可能です。
my_dict = {'name': 'Fql'} my_dict['name'] = 'Jiyik' print(my_dict) # ????️ {'name': 'Jiyik'}
一方、
fronzensetとプリミティブ値を含むタプル オブジェクトは不変 (およびハッシュ可能) です。
辞書はキーによってインデックス付けされます。キーには文字列や数値などの不変型を使用できます。
fronzenset
またはタプルに変更可能なオブジェクト (リストなど) が含まれている場合、それを辞書内のキーまたはセット内の要素として使用することはできません。
変数に格納されるオブジェクトのタイプが不明な場合は、type()
関数を使用してください。
my_dict = {'name': 'Jiyik'} print(type(my_dict)) # ????️ <class 'dict'> print(isinstance(my_dict, dict)) # ????️ True my_str = 'jiyik.com' print(type(my_str)) # ????️ <class 'str'> print(isinstance(my_str, str)) # ????️ True
type
この関数はオブジェクトのタイプを返します。
渡されたオブジェクトが渡されたクラスのインスタンスまたはサブクラスの場合、isinstance
関数は True を返します。
以上がPython で TypeError:unhashable type:'dict' エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

choosearraysoverlistsinperbetterperformance andmemoryeficiencyspecificscenarios.1)largeNumericaldatasets:Araysreducememoryusage.2)パフォーマンス - クリティカル操作:ArraysOfferSpeedBoostsfortsfortsclikeappendedoring.3)タイプリー:Arrayesenforc

Pythonでは、ループに使用し、列挙し、包括的なリストを通過することができます。 Javaでは、従来のループを使用し、ループを強化してアレイを通過することができます。 1。Pythonリストトラバーサル方法は、ループ、列挙、およびリスト理解のためのものです。 2。Javaアレイトラバーサル法には、従来のループとループ用の強化が含まれます。

この記事では、バージョン3.10で導入されたPythonの新しい「マッチ」ステートメントについて説明します。これは、他の言語のスイッチステートメントに相当するものです。コードの読みやすさを向上させ、従来のif-elif-elよりもパフォーマンスの利点を提供します

Python 3.11の例外グループは、複数の例外を同時に処理することで、同時シナリオと複雑な操作でエラー管理を改善します。

Pythonの関数注釈は、タイプチェック、ドキュメント、およびIDEサポートの関数にメタデータを追加します。それらはコードの読みやすさ、メンテナンスを強化し、API開発、データサイエンス、ライブラリの作成において重要です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









