Ana içeriğe atla

Python Hashmap’lerine Bir Rehber

Hashmap’lerin ne olduğunu ve Python’da sözlükler aracılığıyla nasıl uygulandıklarını keşfedin.
Güncel 16 Nis 2026  · 11 dk. oku

Günümüzde veri uzmanları veri depolamadan söz ettiklerinde çoğu zaman verinin nerede depolandığını, yani yerel dosyalar, SQL ya da NoSQL veritabanları veya bulutu kastederler. Ancak veri depolamayla ilgili bir başka önemli boyut da verinin nasıl depolandığıdır.

Veri depolamanın nasılı çoğu zaman daha alt düzeyde, programlama dillerinin çekirdeğinde gerçekleşir. Bu, araçları nasıl kullandığımızdan çok, kullandığımız araçların tasarımıyla ilgilidir. Yine de, verinin nasıl depolandığını bilmek, işi mümkün kılan temel mekanizmaları anlamak için kritik öneme sahiptir. Dahası, bu bilgi, hesaplama performansını artırmak için daha iyi kararlar almamıza yardımcı olabilir.

Hashmap’lerin yanı sıra bağlı listeler, yığınlar, kuyruklar ve grafiklerle gerçekten ilgileniyorsanız, Python’da Veri Yapıları ve Algoritmalar kursumuzu alabilmek için DataCamp’e kaydolun.

Hashmap Nedir?

Bir hashmap’i tanımlamak için önce karma (hashing) işleminin ne olduğunu anlamamız gerekir. Hashing, verilen herhangi bir anahtarı veya karakter dizisini başka bir değere dönüştürme işlemidir. Sonuç genellikle, özgün anahtarla çalışmaya kıyasla hesaplamayı kolaylaştıran, daha kısa ve sabit uzunlukta bir değerdir.

Hashmap’ler, diğer adıyla hashtable’lar, hashing’in en yaygın uygulamalarından biridir. Hashmap’ler anahtar-değer çiftlerini (ör. çalışan ID’si ve çalışan adı) indeks üzerinden erişilebilen bir listede saklar. Şöyle diyebiliriz: hashmap, veriyi ilişkilendirmeli bir biçimde depolamak için hashing tekniklerinden yararlanan bir veri yapısıdır. Ekleme, silme ve arama dahil daha hızlı veri işlemlerine imkân tanıyan optimize edilmiş veri yapılarıdır.

Hashmap’lerin arkasındaki fikir, girdileri (anahtar/değer çiftleri) bir kova (bucket) dizisine dağıtmaktır. Verilen bir anahtar için, bir karma işlevi, girdinin bulunabileceği yeri öneren ayrı bir indeks hesaplar. Özgün anahtar yerine bir indeksin kullanılması, hashmap’leri özellikle veri ekleme, kaldırma ve arama gibi çoklu veri işlemleri için uygun kılar.

Bir Python hashmap nasıl çalışır

Bir hashmap nasıl çalışır. Görsel: Yazar

Karma değeri (ya da kısaca hash) hesaplamak için bir karma işlevi, matematiksel bir karma algoritmasına göre yeni değerler üretir. Kuramsal olarak anahtar-değer çiftleri sınırsız olduğundan, karma işlevi anahtarları verilen bir tablo boyutuna göre eşler.

Artıları ve eksileri olan birden çok karma işlevi vardır. Bir karma işlevinin temel amacı, aynı girdi için her zaman aynı değeri döndürmektir.

En yaygın olanlar şunlardır:

  • Bölme Yöntemi: Karma değerlerini hesaplamanın en basit ve en hızlı yoludur. Anahtar tablo boyutuna bölünür ve kalan, karma olarak kullanılır.
  • Orta Kare Yöntemi: Verilen anahtarın karesi alınır, ardından orta basamaklar seçilir ve bu basamaklar elemanın indeksi olarak kullanılır.
  • Çarpma Yöntemi: Anahtarın büyük bir reel sayıyla çarpımının kesirli kısmından karma indeksi elde edilir.
  • Katlama Yöntemi: Anahtar önce eşit boyutlu parçalara bölünür, sonuçlar toplanır ve tablo boyutuna bölünür. Karma, bu işlemin kalanıdır.

Python’da Hashmap

Python, hashmap’leri yerleşik sözlük (dictionary) veri türüyle uygular. Hashmap’ler gibi sözlükler de veriyi {key:value} çiftleri halinde saklar. Sözlüğü oluşturduktan sonra (bir sonraki bölümde bkz.), Python her anahtarın karmasını hesaplamak için arka planda uygun bir karma işlevi uygular.

Python sözlükleri şu özelliklerle gelir:

  • Sözlükler değiştirilebilirdir (mutable): Bu, sözlük oluşturulduktan sonra ögeleri değiştirebileceğimiz, ekleyebileceğimiz veya kaldırabileceğimiz anlamına gelir.
  • Ögeler sıralıdır: Python 3.6 ve öncesinde sözlükler sırasızdı; yani ögelerin belirli bir sırası yoktu. Ancak Python 3.7’nin yayımlanmasıyla birlikte sözlükler sıralamayı korur hâle geldi. Artık bir Python sözlüğü oluşturduğunuzda anahtarlar, kaynak kodda listelendikleri sırayı izler. Bu değişikliğin ardındaki nedenler hakkında daha fazla bilgi için, Python’un çekirdek geliştiricilerinden Raymond Hettinger’ın şu notunu okuyun.
  • Anahtarlar değiştirilemezdir (immutable): Bu, anahtarların değiştirilemeyen veri türleri olması gerektiği anlamına gelir. Başka bir deyişle sözlükler, dizgiler (string), sayılar ve demetler (tuple) gibi karma üretilebilir veri türlerine izin verir. Buna karşılık, liste gibi değiştirilebilir türler anahtar olamaz.
  • Anahtarlar benzersizdir: Bir sözlükte anahtarlar benzersizdir ve yinelenemez. Aynı anahtar birden fazla kullanılırsa, sonraki girişler önceki değerin üzerine yazacaktır.

Dolayısıyla hashmap’lerle sözlükler arasındaki farkları hiç merak ettiyseniz, cevap basit. Sözlük, Python’un hashmap’lere yerel uygulamasıdır. Hashmap birden fazla hashing tekniğiyle oluşturulabilen bir veri yapısı iken, sözlük Python’a özgü bir hashmap’tir ve tasarımı ile davranışı Python’un dict sınıfında belirlenmiştir.

Python, Java ve C++ gibi birçok modern programlama dili hashmap’leri destekler. Python’da hashmap’ler, muhtemelen aşina olduğunuz sözlükler aracılığıyla uygulanır. Aşağıdaki bölümlerde sözlüklerin temellerini, nasıl çalıştıklarını ve farklı Python paketleri kullanarak nasıl uygulanabileceklerini ele alacağız.

Python Sözlükleri Nasıl Kullanılır

En yaygın sözlük işlemlerinden bazılarına bakalım. Sözlükleri nasıl kullanacağınız hakkında daha fazla bilgi için Python Sözlükleri Eğitimi yazımıza göz atın.

Sözlük oluşturma

Python’da sözlük oluşturmak oldukça basittir. Sadece süslü parantezleri kullanıp, virgülle ayrılmış anahtar-değer çiftlerini eklemeniz yeterli. Alternatif olarak yerleşik dict() işlevini de kullanabilirsiniz. Başkentleri ülkelere eşleyen bir sözlük oluşturalım:

# Create dictionary
dictionary_capitals = {'Madrid': 'Spain', 'Lisboa': 'Portugal', 'London': 'United Kingdom'}

# Print the content of the dictionary
print(dictionary_capitals)

# Expected output:
# {'Madrid': 'Spain', 'Lisboa': 'Portugal', 'London': 'United Kingdom'}

Bir sözlükte anahtarın benzersiz olması gerektiğini, yinelenen anahtarlara izin verilmediğini unutmamak önemlidir. Ancak yinelenen anahtarlar söz konusu olduğunda Python hata vermek yerine, anahtarın son geçtiği değeri geçerli sayar ve ilk anahtar-değer çiftini yok sayar. Kendiniz görün:

dictionary_capitals = {'Madrid': 'China', 'Lisboa': 'Portugal', 
                       'London': 'United Kingdom','Madrid':'Spain'}

print(dictionary_capitals)

# Expected output:
# {'Madrid': 'Spain', 'Lisboa': 'Portugal', 'London': 'United Kingdom'}

Sözlükte arama

Sözlüğümüzde bilgi aramak için köşeli parantez içinde anahtarı belirtmemiz yeterlidir; Python karşılık gelen değeri döndürür:

# Search for data
print(dictionary_capitals['Madrid'])

# Expected output: Spain

Sözlükte bulunmayan bir anahtara erişmeye çalışırsanız Python hata fırlatır. Bunu önlemek için alternatif olarak .get() yöntemini kullanabilirsiniz. Var olmayan bir anahtar durumunda None değeri döner:

print(dictionary_capitals.get('Prague'))

# Expected output: None

Sözlüğe değer ekleme ve silme

Yeni bir başkent-ülke çifti ekleyelim:

# Create a new key-value pair
dictionary_capitals['Berlin'] = 'Italy'

print(dictionary_capitals)

# Expected output:
# {'Madrid': 'Spain', 'Lisboa': 'Portugal', 'London': 'United Kingdom', 'Berlin': 'Italy'}

Aynı sözdizimi, bir anahtarla ilişkili değeri güncellemek için de kullanılabilir. Berlin ile ilişkili değeri düzeltelim:

# Update the value of a key
dictionary_capitals['Berlin'] = 'Germany'

print(dictionary_capitals)

# Expected output:
# {'Madrid': 'Spain', 'Lisboa': 'Portugal', 'London': 'United Kingdom', 'Berlin': 'Germany'}

Şimdi sözlüğümüzdeki çiftlerden birini silelim

# Delete key-value pair
del dictionary_capitals['Lisboa']

print(dictionary_capitals)

# Expected output:
# {'Madrid': 'Spain', 'London': 'United Kingdom', 'Berlin': 'Germany'}

Ya da sözlükteki tüm anahtar-değer çiftlerini silmek isterseniz .clear() yöntemini kullanabilirsiniz:

dictionary_capitals.clear()

print(dictionary_capitals)

# Expected output: {}

Sözlüklerde döngü

Tüm anahtar-değer çiftlerini almak istiyorsanız .items() yöntemini kullanın; Python yinelenebilir bir demet (tuple) listesi döndürür:

dictionary_capitals = {'Madrid': 'Spain', 'Lisboa': 'Portugal', 
                      'London': 'United Kingdom', 'Berlin': 'Germany'}

print(dictionary_capitals.items())

# Expected output:
# dict_items([('Madrid', 'Spain'), ('Lisboa', 'Portugal'), 
# ('London', 'United Kingdom'), ('Berlin', 'Germany')])
# Iterate over key-value pairs
for key, value in dictionary_capitals.items():
    print('the capital of {} is {}'.format(value, key))

# Expected output:
# the capital of Spain is Madrid
# the capital of Portugal is Lisboa
# the capital of United Kingdom is London
# the capital of Germany is Berlin

Aynı şekilde, yalnızca anahtarları ya da yalnızca değerleri içeren yinelenebilir bir liste almak isterseniz sırasıyla .keys() ve .values() yöntemlerini kullanabilirsiniz:

print(dictionary_capitals.keys())

# Expected output:
# dict_keys(['Madrid', 'Lisboa', 'London', 'Berlin'])
for key in dictionary_capitals.keys():
    print(key.upper())

# Expected output:
# MADRID
# LISBOA
# LONDON
# BERLIN
print(dictionary_capitals.values())

# Expected output:
# dict_values(['Spain', 'Portugal', 'United Kingdom', 'Germany'])
for value in dictionary_capitals.values():
    print(value.upper())

# Expected output:
# SPAIN
# PORTUGAL
# UNITED KINGDOM
# GERMANY

Hashmap’lerin Gerçek Hayattaki Kullanımları

Hashmap’ler dijital dünyanın neredeyse her yerinde kullanılan güçlü veri yapılarıdır. Aşağıda hashmap’lerin gerçek hayattaki kullanım alanlarından bazılarını bulabilirsiniz:

  • Veritabanı indeksleme: Hashmap’ler büyük hacimli verileri indekslemek ve aramak için sıkça kullanılır. Yaygın web tarayıcıları, indekslenmiş web sayfalarını saklamak için hashmap’lerden yararlanır.
  • Önbellek yönetimi: Modern işletim sistemleri, sık kullanılan bilgilere hızlı erişimi sağlamak için önbellek belleğini düzenlemede hashmap’leri kullanır.
  • Kriptografi: Hashmap’ler kriptografi alanında kritik bir rol oynar. Kriptografik algoritmalar, veri bütünlüğü, veri doğrulama ve ağlar arası güvenli işlemler için hashmap’lerden yararlanır.
  • Blockchain: Hashmap’ler blockchain’in merkezindedir. Ağda her işlem gerçekleştiğinde, o işlemin verisi karma işlevine giriş olarak alınır ve benzersiz bir çıktı üretilir. Zincirdeki her blok, bir önceki bloğun karmasını taşır ve bloklardan oluşan bir zincir oluşur.

Hashmap En İyi Uygulamaları ve Yaygın Hatalar

Hashmap’ler son derece çok yönlü ve verimli veri yapılarıdır. Ancak bazı sorun ve sınırlamalar da barındırırlar. Hashmap’lerle ilişkili yaygın zorlukları gidermek için bazı hususları ve iyi uygulamaları akılda tutmak önemlidir.

Anahtarlar değiştirilemez olmalıdır

Bu mantıklıdır: Anahtarın içeriği değişirse, karma işlevi farklı bir karma döndürür ve Python anahtarla ilişkili değeri bulamaz.

Hashmap çakışmalarını (collision) ele alma

Hashing, her öğe karma tablosunda benzersiz bir konuma eşlendiğinde sorunsuz çalışır. Ancak bazen karma işlevleri farklı girdiler için aynı çıktıyı döndürebilir. Örneğin, bir bölme tabanlı karma işlevi kullanıyorsanız, farklı tamsayılar aynı karmaya sahip olabilir (modül bölme uygulandığında aynı kalanı döndürebilir) ve bu da çakışma adı verilen bir sorunu oluşturur. Çakışmalar çözülmelidir ve bunun için çeşitli teknikler vardır. Neyse ki sözlükler söz konusu olduğunda Python potansiyel çakışmaları arka planda yönetir.

Yük faktörünü anlamak

Yük faktörü, tablodaki eleman sayısının toplam kova sayısına oranı olarak tanımlanır. Bu, verinin ne kadar iyi dağıldığını tahmin etmeye yarar. Genel kural olarak, veri ne kadar eşit dağılırsa çakışma olasılığı o kadar düşüktür. Yine sözlükler için Python, yeni anahtar-değer çiftleri eklendiğinde veya silindiğinde tablo boyutunu otomatik olarak uyarlar.

Performansın farkında olun

İyi bir karma işlevi çakışmaları en aza indirir, hesaplaması kolaydır ve ögeleri karma tablosunda eşit dağıtır. Bu, tablo boyutunu veya karma işlevinin karmaşıklığını artırarak yapılabilir. Bu yaklaşım az sayıda öğe için pratik olsa da, olası öğe sayısı büyük olduğunda bellek tüketen ve daha az verimli hashmap’lere yol açacağından uygulanabilir değildir.

İhtiyacınız sözlükler mi?

Sözlükler harikadır, ancak belirli verileriniz ve ihtiyaçlarınız için daha uygun başka veri yapıları olabilir. Sonuçta sözlükler, indeksleme, dilimleme ve birleştirme gibi yaygın işlemleri desteklemez; bu da onları bazı senaryolarda daha az esnek ve kullanımı daha zor kılar.

Alternatif Python Hashmap Uygulamaları

Belirtildiği gibi Python, hashmap’leri yerleşik sözlükler aracılığıyla uygular. Ancak hashmap’lerin gücünden yararlanmak için başka yerel Python araçları ve üçüncü taraf kütüphaneler olduğunu da unutmamak gerekir.

En popüler örneklerden bazılarına bakalım.

Defaultdict

Bir sözlüğünüzde bulunmayan bir anahtara her erişmeye çalıştığınızda Python bir KeyError döndürür. Bunu önlemenin bir yolu, .get() yöntemiyle arama yapmaktır. Ancak bunun daha optimize edilmiş bir yolu, collections modülünde bulunan Defaultdict’i kullanmaktır. Defaultdict ile sözlükler neredeyse aynıdır. Tek fark, Defaultdict’in var olmayan anahtarlar için varsayılan bir değer sağladığı için asla hata üretmemesidir.

from collections import defaultdict 

# Defining the dict 
capitals = defaultdict(lambda: "The key doesn't exist") 
capitals['Madrid'] = 'Spain'
capitals['Lisboa'] = 'Portugal'
  
print(capitals['Madrid']) 
print(capitals['Lisboa']) 
print(capitals['Ankara']) 

# Expected output:
# Spain
# Portugal
# The key doesn't exist

Counter

Counter, karma üretilebilir (hashable) nesneleri saymak için özel olarak tasarlanmış bir Python sözlük alt sınıfıdır. Öğeler anahtar, sayıları ise değer olarak saklanır.

Counter’ı başlatmanın birkaç yolu vardır:

  • Bir öğe dizisiyle.

  • Bir sözlükteki anahtarlar ve sayımlarla.

  • ad:değer eşlemesi kullanarak.

from collections import Counter 

# a new counter from an iterable
c1 = Counter(['aaa','bbb','aaa','ccc','ccc','aaa'])
# a new counter from a mapping
c2 = Counter({'red': 4, 'blue': 2})     
# a new counter from keyword args
c3 = Counter(cats=4, dogs=8)       
# print results
print(c1)
print(c2)
print(c3)

# Expected output:
# Counter({'aaa': 3, 'ccc': 2, 'bbb': 1})
# Counter({'red': 4, 'blue': 2})
# Counter({'dogs': 8, 'cats': 4})

Counter sınıfı, yaygın hesaplamaları kolaylaştıran bir dizi kullanışlı yöntemle birlikte gelir.

print('keys of the counter: ', c3.keys())
print('values of the counter: ',c3.values()) 
print('list with all elements: ', list(c3.elements())) 
print('number of elements: ', c3.total()) # number elements
print('2 most common occurrences: ', c3.most_common(2)) # 2 most common occurrences 

# Expected output:
# keys of the counter:  dict_keys(['cats', 'dogs'])
# values of the counter:  dict_values([4, 8])
# list with all elements:  ['cats', 'cats', 'cats', 'cats', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs']
# number of elements:  12
# 2 most common occurrences:  [('dogs', 8), ('cats', 4)]

Scikit-learn karma yöntemleri

Scikit-learn, diğer adıyla sklearn, açık kaynaklı ve sağlam bir Python makine öğrenmesi kütüphanesidir. Python’da makine öğrenmesi ve istatistiksel modellerin uygulanmasını basitleştirmek için oluşturulmuştur.

Sklearn, özellik mühendisliği süreçlerinde çok faydalı olabilecek çeşitli karma yöntemleriyle gelir.

En yaygın yöntemlerden biri CountVectorizer’dır. Verilen bir metni, metnin tamamında geçen her kelimenin sıklığına göre bir vektöre dönüştürmek için kullanılır. CountVectorizer özellikle metin analizi bağlamlarında kullanışlıdır.

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
 
documents = ["Welcome to this new DataCamp Python course",
            "Welcome to this new DataCamp R skill track",
            "Welcome to this new DataCamp Data Analyst career track"]
 
# Create a Vectorizer Object
vectorizer = CountVectorizer()

X = vectorizer.fit_transform(documents)

# print unique values 
print('unique words: ', vectorizer.get_feature_names_out())

# print sparse matrix with word frequency
pd.DataFrame(X.toarray(), columns = vectorizer.get_feature_names_out())

# Expected output:
# unique words:  ['analyst' 'career' 'course' 'data' 'datacamp' 'new' 'python' 'skill'
# 'this' 'to' 'track' 'welcome']

Python'ın CountVectorizer yönteminin çıktısı

Sklearn’de FeatureHasher ve DictVectorizer dahil başka karma yöntemleri de vardır. Bunların pratikte nasıl çalıştığını öğrenebileceğiniz harika bir örnek olarak Python ile Makine Öğrenmesiyle Okul Bütçeleme vaka çalışmamıza göz atın.

Sonuç

Hashmap’lerle ilgili bu eğitimi tamamladığınız için tebrikler. Umarız artık hashmap’ler ve Python sözlükleri hakkında daha iyi bir anlayışa sahipsinizdir. Sözlükler hakkında daha fazla bilgi edinmek ve onları gerçek senaryolarda nasıl kullanacağınızı öğrenmek isterseniz, özel olarak hazırladığımız Python Sözlükleri Eğitimi ile Python Dictionary Comprehension Eğitimi yazılarımızı okumanızı şiddetle tavsiye ederiz.

Son olarak, Python’a yeni başlıyorsanız ve daha fazlasını öğrenmek istiyorsanız, DataCamp’in Python ile Veri Bilimine Giriş kursunu alın ve Yeni Başlayanlar için Python Eğitimi rehberimize göz atın.


Javier Canales Luna's photo
Author
Javier Canales Luna
LinkedIn

Serbest çalışan bir veri analistiyim; dünya genelinde şirketler ve kuruluşlarla veri bilimi projelerinde iş birliği yapıyorum. Ayrıca 2+ yıllık deneyime sahip bir veri bilimi eğitmeniyim. Düzenli olarak İngilizce ve İspanyolca veri bilimiyle ilgili makaleler yazıyorum; bunların bir kısmı DataCamp, Towards Data Science ve Analytics Vidhya gibi köklü internet sitelerinde yayımlandı. Siyaset bilimi ve hukuk geçmişine sahip bir veri bilimci olarak amacım, kamu politikası, hukuk ve teknolojinin kesişiminde çalışmak; fikirlerin gücünden yararlanarak özellikle iklim krizi olmak üzere acil sorunların üstesinden gelmemize yardımcı olabilecek yenilikçi çözümler ve anlatılar geliştirmek. Kendimi otodidakt bir kişi, sürekli öğrenen ve disiplinlerarasılığın güçlü bir savunucusu olarak görüyorum. Yeni şeyler öğrenmek için asla geç değildir.

Konular

Python Yolculuğunuza Bugün Başlayın!

Program

Python Geliştiricisi

28 sa
Kodu test etmek ve sürüm kontrolünü uygulamaktan web kazıma ve paket geliştirmeye kadar, Python geliştirici yolculuğunuzda bir sonraki adımı atın!
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow