Sözlük Elemanlarını İlklendirme

Diyelim ki kelime frekanslarını içeren bir sözlük oluşturuyorsunuz ve metninizi de hali hazırda bir kelime listesine dönüştürmüşsünüz. Şöyle bir şey çalıştırabilirsiniz:

		wdict = {}
		for word in words:
			if word not in wdict:
				wdict[word] = 0
			wdict[word] += 1
	

İlk durum haricinde kelime her göründüğünde if koşulu yanlış olacaktır. Çok sayıda kelimeyi sayıyorsanız muhtemelen pek çoğu sıklıkla sayılacaktır. Bir değer ilklendirmesinin sadece bir kere gerçekleşeceği ve bu değerin arttırımının çok defa olduğu durumlarda try ifadesi kullanmak daha ucuz bir yoldur.

		wdict = {}
		for word in words:
			try:
				wdict[word] += 1
			except KeyError:
        			wdict[word] = 1
	

Varsayılan bir except kullanmak ve try kısmından gönderilen hatayı ele almaya çalışmaktan kaçınmak yerine beklenen KeyError hatasını yakalamak önemlidir.

Python 2.x sürümlerinin yayınlanmasından sonra üçüncü bir metod daha ortaya çıkmıştır. Sözlüklerin artık eğer aranan anahtarın bulunmaması durumunda geri varsayılan bir değer döndürmelerini sağlayan bir get() metodu bulunmaktadır. Bu yaklaşım döngüyü daha sade bir hale getirir:

wdict = {} get = wdict.get for word in words: wdict[word] = get(word, 0) + 1

Bu yazıyı yazdığımda ilk iki yaklaşımdan birinin daha hızlı çalıştığı açık örnekler vardı. Görünen odur ki bu üç yaklaşım artık kelime listesinin özelliklerine az veya çok bağlı olarak hemen hemen aynı (birbirlerine yaklaşık %10 kadar bir fark atarak) peformansı göstermektedir

Ek olarak eğer sözlükte saklanan değer eğer bir nesne veya (değiştirilemez) bir liste ise dict.setdefault metodunu da kullanabilirsiniz:

		...
    			wdict.setdefault(key, []).append(new_element)
	

Bu yaklaşım anahtarı iki kere arama zorunluluğunu ortadan kaldırır.