Python türü dict

Python işlevleri ve meth

Python dili, bir sözlükte neyin anahtar olarak kullanılabileceği konusunda spesifiktir. Bir Python sözlüğünde, tüm anahtarlar karma olabilir olmalıdır.

Sözlüğe anahtar eklerken karma olmayan bir anahtar türü kullanmaya çalışırsanız, “TypeError: unhashable türüyle karşılaşırsınız: ‘dict’” error.

Bu kılavuzda, bu hatanın ne anlama geldiği ve neden ortaya çıktığı hakkında konuşuyoruz. Bunu kodunuzda nasıl çözeceğinizi öğrenebilmeniz için bu hatanın bir örneğini inceliyoruz.




TypeError: unhashable type: ‘dict’

Sözlükler iki bölümden oluşur: anahtarlar ve değerler. Anahtarlar, bir değere bağlı tanımlayıcılardır. Bir anahtara başvurduğunuzda, o anahtarla ilişkili değeri alabilirsiniz.

Bir sözlükte yalnızca karma nesneler anahtar olabilir. dizeler, tamsayılar, tuples ve frozenset'ler bazı istisnalar dışında yıkanabilir. Bu nedenle sözlükler sözlükte anahtar olarak kullanılamaz.

Sözlüğe bir öğe eklemek için geçerli bir hashable anahtarı belirtmelisiniz. Örneğin, “name” geçerli bir anahtardır, ancak { “name”: “test” } değildir.




Örnek Senaryo

Burada bir fırında beşten fazla satılan tüm kekleri bir sözlükten başka bir sözlüğe ekleyen bir program yazıyoruz.

Her pasta hakkında sözlükler içeren pastaların bir listesini ilan ederek başlayın. Ayrıca, beş defadan fazla satılmış pastaları depolayabileceğimiz bir sözlük tanımlıyoruz.

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

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ı.

“keklerimiz” liste üç sözlük içerir. Her sözlük iki anahtar ve değer içerir. Anahtar isimler “kek” ve “sold”.


Şimdi, pasta listemizden geçen ve satılanları bulan bir for döngüsü yazıyoruz. beş defadan fazla. Bu kekler “sold_more_than_five” sözlüğüne eklenecek:

keklerde c : if c["sold"] > 5: sold_more_than_five[c] = c["sold"] print(c["name"] + " beşten fazla satıldı.") print(sold_more_than_five)

For döngümüzde, her sözlükteki “sold” değerinin 5'ten büyük olup olmadığını karşılaştırırız. Eğer öyleyse, o öğe “sold_more_than_five” sözlüğümüze eklenir. kullanıcıya söz konusu pastanın beş defadan fazla satıldığını bildiren mesaj konsola yazdırılır.

Döngümüz çalıştığında, t'yi yazdırırız. o “sold_more_than_five” konsola sözlük.

Programımızın çalıştığından emin olmak için kodumuzu çalıştırın:

İzleme (en son arama son): Dosya "main.py", satır 16,  sold_more_than_five[c] = c["sold"] TypeError: unhashable type: 'dict'

Kodumuz bir hata döndürüyor.




Çözüm

< p>Başka bir sözlük kullanarak bir sözlük anahtarı oluşturmaya çalıştığımız için kodumuz çalışmıyor.

“c” “cakes” liste. Bu, “sold_more_than_five” sözlük, yanlışlıkla bir sözlüğü anahtar olarak eklemeye çalışıyoruz:

sold_more_than_five[c] = c["sold"]

“if” deyimi “Havuçlu Kek” kek, kodumuz şu şekilde çalışmaya çalışır:

sold_more_than_five[{"name": "Carrot Cake", "sold ": 7}] = 7

Sözlükte anahtar olarak bir sözlük eklemeye çalıştığımız için bu geçersiz. Bu sorunu sözlük anahtarımızın adı olarak c[“name”] kullanarak çözebiliriz:

sold_more_than_five[c["name"]] = c["sold"]

Kodumuzu bu revize edilmiş kodla çalıştırın:

Havuçlu Kek beşten fazla satıldı. Hindistan Cevizi ve Kireç Kek beşten fazla satıldı. {'Carrot Cake': 7, 'Coconut and Lime Cake': 9}

Kodumuz başarıyla çalışıyor. Artık her pastanın adını sözlük yerine anahtar olarak kullanıyoruz.





Sonuç

Anahtarı unhashable olan bir sözlükte bir öğe oluşturmaya çalıştığınızda “TypeError: unhashable type: ‘dict’” hatası ortaya çıkıyor Bir sözlükte anahtar olarak yalnızca dizeler, demetler ve tamsayılar gibi değişmez nesneler kullanılabilir.

Bu hatayı çözmek için, bir öğe oluştururken yalnızca hashable nesneleri kullandığınızdan emin olun. bir sözlük. Artık bu yaygın Python hatasını profesyonel bir geliştirici gibi çözmeye hazırsınız!





Python türü dict: StackOverflow Questions

Tutorials