İçeriğe geç

Python Veri Yapıları - Dictionary

Python’da Dictionary(Sözlük) Veri Yapısı:

Python’da dictionary (sözlük), anahtar-değer çiftlerini saklayan ve veri arama, ekleme ve silme işlemleri için optimize edilmiş bir veri yapısıdır. Bu makalede, dictionary veri yapısı ile ilgili temel işlemler ve kullanım örnekleri ele alınacaktır:

  1. Dictionary’e Eleman Atama
  2. Dictionary Elemanlarını Gezme
  3. Dictionary İndeks Kullanarak Gezme
  4. Dictionary’de Bir Anahtarın Varlığını Kontrol Etme
  5. items() Fonksiyonunun Kullanımı
  6. Dictionary İşlemlerinin Zaman ve Bellek Karmaşıklıkları (Complexıty)

1. Dictionary’e Eleman Atama

Dictionary’ye eleman atama işlemi, belirli bir anahtara değer atama veya yeni anahtar-değer çifti ekleme şeklinde olabilir.

a. Belirli Bir Anahtara Değer Atama

Var olan bir anahtarın değerini güncelleyebilir veya yeni bir anahtar-değer çifti ekleyebilirsiniz.

my_dict = {"apple": 1, "banana": 2}
my_dict["apple"] = 3 # Mevcut 'apple' anahtarının değeri güncellenir
my_dict["cherry"] = 5 # Yeni bir anahtar-değer çifti eklenir
print(my_dict) # Çıktı: {'apple': 3, 'banana': 2, 'cherry': 5}

b. Eleman Silme

del anahtar kelimesi veya pop() metodu kullanılarak belirli bir anahtar silinebilir.

# 'banana' anahtarını silme
del my_dict["banana"]
print(my_dict) # Çıktı: {'apple': 3, 'cherry': 5}
# 'apple' anahtarını pop ile silme
value = my_dict.pop("apple")
print(my_dict) # Çıktı: {'cherry': 5}
print("Silinen değerin değeri:", value) # Çıktı: Silinen değerin değeri: 3

2. Dictionary Elemanlarını Gezme

Dictionary üzerinde gezinti yapmak için for döngüsü kullanılabilir.

a. Anahtarları Gezme

Anahtarları iterasyonla dolaşarak işlemler yapabilirsiniz.

my_dict = {"apple": 3, "banana": 2, "cherry": 5}
for key in my_dict:
print(key)
# Çıktı: apple, banana, cherry (her satırda bir anahtar)

b. Değerleri Gezme

values() metodu ile değerleri dolaşabilirsiniz.

for value in my_dict.values():
print(value)
# Çıktı: 3, 2, 5 (her satırda bir değer)

3. Dictionary İndeks Kullanarak Gezme

Python dictionary veri yapısında indeks kavramı doğrudan yoktur, ancak anahtar-değer çiftlerini belirli bir sıra ile dolaşabilirsiniz.

keys = list(my_dict.keys())
for i in range(len(keys)):
key = keys[i]
print(f"Index {i}: {key} -> {my_dict[key]}")
# Çıktı:
# Index 0: apple -> 3
# Index 1: banana -> 2
# Index 2: cherry -> 5

4. Dictionary’de Bir Anahtarın Varlığını Kontrol Etme

Dictionary’de bir anahtarın olup olmadığını kontrol etmek için in anahtar kelimesi kullanılabilir.

my_dict = {"apple": 3, "banana": 2, "cherry": 5}
# 'banana' anahtarının varlığını kontrol etme
if "banana" in my_dict:
print("banana anahtarı sözlükte mevcut.")
else:
print("banana anahtarı sözlükte mevcut değil.")
# 'grape' anahtarının varlığını kontrol etme
if "grape" not in my_dict:
print("grape anahtarı sözlükte mevcut değil.")
# Çıktı:
# banana anahtarı sözlükte mevcut.
# grape anahtarı sözlükte mevcut değil.

5. items() Fonksiyonunun Kullanımı

items() metodu, dictionary içindeki anahtar-değer çiftlerini bir tuple olarak döner.

for key, value in my_dict.items():
print(f"{key}: {value}")
# Çıktı:
# apple: 3
# banana: 2
# cherry: 5

a. Başlangıç İndeksini Belirleyerek Gezme

Anahtar-değer çiftlerini enumerate ile birlikte kullanarak gezinebilirsiniz.

for index, (key, value) in enumerate(my_dict.items(), start=1):
print(f"Index {index}: {key} -> {value}")
# Çıktı:
# Index 1: apple -> 3
# Index 2: banana -> 2
# Index 3: cherry -> 5

6. Dictionary İşlemlerinin Zaman ve Bellek Karmaşıklıkları

Python’daki dictionary veri yapısı, hash tabanlı bir yapı olduğundan çoğu işlem ortalama O(1) zaman karmaşıklığına sahiptir. Ancak en kötü durum karmaşıklığı O(n) olabilir.

Zaman Karmaşıklığı

  • Ekleme (Atama): O(1) amortize, O(n) en kötü durum (hash çakışması veya yeniden boyutlandırma gerekirse)
  • Silme (del, pop()): O(1) amortize, O(n) en kötü durum
  • Okuma (Anahtara göre değer okuma): O(1) amortize, O(n) en kötü durum
  • Yazma (Anahtara göre değer yazma): O(1) amortize, O(n) en kötü durum
  • Anahtarın varlığını kontrol etme (in): O(1) amortize, O(n) en kötü durum

Yer (bellek) karmaşıklığı

Python dictionary, eklenen her anahtar-değer çifti için hash tablosunda bir giriş tutar. Bu nedenle bellek kullanımı, eleman sayısına ve anahtarların hash tablosundaki dağılımına bağlı olarak değişir. O(n) olarak kabul edilebilir.

Sonuç

Bu makalede, Python’da dictionary veri yapısında eleman atama, elemanları gezme, indeks kullanarak dolaşma, bir anahtarın varlığını kontrol etme ve items() fonksiyonunun nasıl kullanılacağı üzerinde duruldu. Dictionary, anahtar-değer çiftleriyle çalışmayı kolaylaştıran ve Python programlamada sıkça kullanılan güçlü bir veri yapısıdır.