Python hash edilemez tür listesi

Python işlevleri ve meth

Python sözlükleri, bir sözlükte anahtar olarak yalnızca hashable veri türlerini kabul eder. Liste, ele geçirilebilir bir veri türü değildir. Bir sözlükte bir listeyi anahtar olarak belirtirseniz, “TypeError: unhashable type: ‘list’rsquo;rdquo; error.

Bu kılavuzda, bu hatanın ne anlama geldiği ve kodunuzda neden gördüğünüz hakkında konuşuyoruz. Nasıl çözeceğinizi göstermek için bu hatanın bir örneğini inceleyeceğiz.




TypeError: unhashable type: ‘list’

Sözlüklerin iki bölümü vardır: anahtarlar ve değerler. Anahtarlar, belirli bir değerle ilişkili etiketlerdir. Bir değere erişmek için, o değerin anahtar adına başvurmalısınız.

Değerler, dizeleri -in-python/">listeler, anahtar olarak yalnızca hashable nesneler kabul edilebilir. Hashable nesneler, zamanla değişmeyen bir hash değerine sahip nesnelerdir.  Karıştırılabilir nesnelere örnek olarak demetler ve dizeler verilebilir.

Listelerin değişmeyen bir karma değeri yoktur. Hash değerleri zamanla değişebilir. Bu, sözlük anahtarı olarak bir liste belirleyemeyeceğiniz anlamına gelir. 




Örnek Senaryo

ortalama notu üzerinde olan öğrencilerin bir listesini oluşturan bir program oluşturalım. 75. Bu listede her öğrencinin sözlük kayıtları ve notları yer alacaktır. Bu sözlüğü oluşturmak için, okuldaki tüm öğrencilerin ve notlarının bir listesini içeren bir sözlükten çalışacağız.

Öğrencilerin bir listesini ve aşağıdakiler için bir sözlük tanımlayarak başlayalım. en iyi öğrencilerimiz:

öğrenciler = [ { "isim": "Linda", "notlar": [84] , 82, 65] }, { "isim": "Alex", "notlar": [67, 68, 83] }, { "ad": "Holly", "notlar": [72, 74, 81] } ] top_students = {}

“öğrenciler” liste bir sözlüktür. Her sözlük iki anahtar içerir: isim ve notlar. “top_students” adında bir sözlük tanımladık. Bu, en iyi öğrencilerimizle ilgili bilgileri içerecektir.

Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. Bugün bir eğitim kampı ile eşleştirin.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan az zaman harcadı.

Artık bunu tanımladık. sözlükte, not ortalaması 75'in üzerinde olan öğrencileri filtrelemek ve onları yeni sözlüğümüze eklemek için for döngüsü kullanıyoruz:

öğrencilerde s için: ortalama = toplam(s["notlar"]) / len(s["notlar"]) eğer ortalama > 75: top_students[s["grades"]] =s["name"]

For döngüsünün her yinelemesinde, bir öğrencinin aldığı tüm notların ortalaması. Bunu, tüm notların toplamını kaç tane not kaydedildiğine bölerek yapıyoruz.

Sonra, bu ortalamanın 75'ten büyük olup olmadığını kontrol ediyoruz. Eğer öyleyse, yeni bir giriş oluşturuyoruz. top_students sözlüğü bir öğrencinin adı ve notları ile birlikte.

Son olarak, top_students sözlüğünü konsola yazdırıyoruz, böylece not ortalaması 75'in üzerinde olan tüm öğrencileri görebiliyoruz:

print(top_students)

Kodumuzu çalıştırın ve ne olduğunu görün olur:

Geri izleme (en son çağrı son): Dosya "main.py", satır 11 ,  top_students[s["grades"]] = s["name"] TypeError: unhashable type: 'list'

Kodumuz başarıyla yürütülemiyor.




The Çözüm

Kodumuz, yorumlayıcı 11. satıra ulaşana kadar çalışır. Bu satırda kodumuz şunu belirtir:

Kodumuzdaki hata, bir listeyi şu şekilde atamaya çalışmış olmamızdır. sözlükte bir anahtar. Kodumuz döngünün ilk yinelemesinde bu satırı ayrıştırdığında, kodumuz aşağıdaki anahtar ve değere sahip bir sözlük oluşturmaya çalışır:

{ [84, 82, 65]: "Linda" }

Bu geçersiz bir sözlük. Kodumuz çalışmayan bir anahtar olarak bir liste atamaya çalışır.

Bu sorunu çözmek için, sözlükte not listesi yerine öğrencinin adını anahtar olarak kullanırız:

top_students[s["name"]] = s["grades"]

Notlar listesini anahtar yerine bir değer olarak atadık. Öğrencinin adı sözlükteki anahtardır. Kodumuzu çalıştıralım:

{'Linda': [84, 82, 65] , 'Holly': [72, 74, 81]}

Kodumuz, en iyi performans gösteren öğrenciler hakkında bilgiler içeren bir sözlük başarıyla oluşturuyor. Son üç sınavındaki ortalama notu 75'in üzerinde olan herhangi bir öğrenci sözlüğe eklendi.


Sözlüğümüz şu şekildedir:

  • Anahtarlar: Linda, Holly
  • Değerler: [84, 82, 65], [72, 74, 81]

Artık anahtar adlarımıza karakter dizileri atadığımız için kodumuz çalışıyor.




Sonuç

Bir listeyi sözlükte anahtar olarak atamaya çalıştığınızda “TypeError: unhashable type: ‘list’” hatası ortaya çıkıyor. Bu hatayı çözmek için, yalnızca bir sözlük anahtarı olarak dize veya bir demet.

Artık bu hatayı profesyonel bir kodlayıcı gibi çözmeye hazırsınız!





Python hash edilemez tür listesi: StackOverflow Questions

Tutorials