Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python TypeError:ハッシュ不可能なタイプ:「スライス」ソリューション

Pythonディクショナリの値は、リストのようにスライスすることはできません。これは、辞書がカスタムキー値を持つことができるためです。それらはゼロから索引付けされません。辞書をリストのようにスライスしようとすると、「TypeError:unhashable type:‘slice’」エラーが発生します。

このガイドでは、このエラーの意味と、コードにエラーが表示される理由について説明します。このエラーの解決に役立つ例について説明します。

TypeError:ハッシュ不可能なタイプ:「スライス」

スライスは、文字列、リスト、タプルなどのシーケンスのサブセットです。この名前は、スライスの目的を示しています。これは、シーケンスの「スライス」です。

次のプログラムを検討してください。

news_sites = ["New York Times", "Washington Post", "CNN"]
print(news_sites[:2])

このコードは、「news_sites」リストの最初の2つの値を取得し、それらをコンソールに出力します。コードは次のようになります:[‘New York Times’、‘WashingtonPost’]。

これはスライスの例です。リストから2つのオブジェクトを取得しています。コロンとインデックス値を指定することで、取得するオブジェクトをPythonに指示します。

辞書をリストのようにスライスすることはできません。辞書にはインデックス番号がないため、この構文は適用されません。

TypeError:ハッシュ不可能なタイプ:「スライス」

コンピュータハードウェアストアで販売されているキーボードに関する情報を表示するプログラムを作成します。まず、キーボードに関するデータを使用して辞書を定義します。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

keyboard = {
	  "name": "Huntsman Mini",
	  "brand": "Razer",
	  "price": 119.99,
	  "switch_type": "Razer Switches",
}

このプログラムは、キーボードの名前、価格、キーボードのブランド、およびキーボードで使用されているスイッチの種類に関する情報を格納します。表示したいのは、キーボードの名前、キーボードのブランド、およびその価格だけです。

これを行うには、スライスを使用して辞書の最初の3つの項目を取得します。これらのアイテムは、キーボードの名前、ブランド、および価格です。

show_to_customer = keyboard[:3]

このコードは、辞書の最初の3つの項目を取得します。次に、forループを使用してこのリストを反復処理し、各項目をコンソールに出力します。

for s in show_to_customer:
	     print(s[1])

インデックスを使用して、「show_to_customer」変数の各レコードから値を取得します。次に、print()を使用してその値をコンソールに出力します 声明。

コードを実行して、何が起こるか見てみましょう。

Traceback (most recent call last):
  File "main.py", line 8, in <module>
	     show_to_customer = keyboard[:3]
TypeError: unhashable type: 'slice'

コードはエラーを返します。

ソリューション

リストとは異なり、辞書はスライスできません。辞書にはインデックス番号がないため、スライスを使用して辞書内のアイテムを取得することはできません。データはキーと値のペアで保存されます。辞書はスライスできないため、for 以前のループは適切ではありません。

アクセスする値を辞書から直接指定する必要があります。これを行うには、辞書で適切なキー名を参照してください。

コードを解決するために、コンソールに表示する各値に個別にアクセスしてみましょう。

keyboard = {
	  "name": "Huntsman Mini",
	  "brand": "Razer",
	  "price": 119.99,
	  "switch_type": "Razer Switches",
}

print("Name: " + keyboard["name"])
print("Brand: " + keyboard["brand"])
print("Price: $" + str(keyboard["price"]))

各print()ステートメントは、ディクショナリからの異なる値を参照します。最初のprintステートメントは、ラベル「Name:」に続いて辞書の「name」の値をコンソールに出力します。 2番目と3番目のステートメントは、それぞれ「ブランド」と「価格」の値をコンソールに出力します。

str()を使用して、「price」値を文字列に変換します 連結演算子(+)を使用して、「Price:$」ラベルと連結するメソッド。

新しいプログラムを実行してみましょう:

Name: Huntsman Mini
Brand: Razer
Price: $119.99

このコードは、コンソールに表示したい3つの情報を正常に出力します。ユーザーはキーボードの名前、ブランド、価格を確認できます。

結論

「TypeError:unhashable type:‘slice’」エラーは、スライス構文を使用して辞書からアイテムにアクセスしようとすると発生します。このエラーを解決するには、辞書から直接アクセスしたい項目を参照してください。

これで、専門家のようにこのエラーを解決するために必要な知識が得られました!


  1. Pythonの文字列データ型

    Pythonの文字列は、引用符で表された連続した文字のセットとして識別されます。 Pythonでは、一重引用符または二重引用符のペアを使用できます。文字列のサブセットは、スライス演算子([]および[:])を使用して取得できます。インデックスは、文字列の先頭で0から始まり、末尾で-1から始まります。 例 プラス(+)記号は文字列連結演算子であり、アスタリスク(*)は繰り返し演算子です。例- #!/usr/bin/python str = 'Hello World!' print str # Prints complete string print str[0] # Prints

  2. PythonでTypeError例外をキャッチする方法は?

    TypeErrorsは、間違ったタイプのオブジェクトを組み合わせたり、間違ったタイプのオブジェクトで関数を呼び出したりすることで発生します。 例 import sys try : ny = 'Statue of Liberty' my_list = [3, 4, 5, 8, 9] print  my_list + ny except TypeError as e: print e print sys.exc_type 出力 can only concatenate list (not ""str") to list <type &#