Karma tabloları

Python'da Veri Yapıları ve Algoritmalar

Miriam Antona

Software engineer

Tanım

  • Öğeler koleksiyonu depolar
  • Anahtar-değer çiftleri

      lasagna: 14.75
      moussaka: 21.15
      sushi: 16.05
    
  • Neredeyse tüm dillerde yerleşik bir karma tablo vardır:

    • hash'ler, hash haritaları, sözlükler, ilişkilendirme dizileri
    • Python: sözlük (dictionary)
Python'da Veri Yapıları ve Algoritmalar

Yapı

  • Her konum: slot/bucket

Boş bir karma tablosunun şematik gösterimi.

Python'da Veri Yapıları ve Algoritmalar

Karma fonksiyonları

Boş bir karma tablosunun şematik gösterimi. Beşinci konuma lazanyanın fiyatı eklenmiştir.

Python'da Veri Yapıları ve Algoritmalar

Karma fonksiyonları

Bir karma tablosunun şematik gösterimi. Ortadaki okta "Hash function" yazısı, "Lasagna"yı beşinci konumdaki değere eşler.

  • Her uygulamada
    • aynı girdi için aynı değeri döndürmelidir
Python'da Veri Yapıları ve Algoritmalar

Aramalar

Bazı değerler içeren bir karma tablosunun şematik gösterimi.

  • "lasagna"yı bul
    • hash("lasagna") -> 5
Python'da Veri Yapıları ve Algoritmalar

Aramalar

Bazı değerler içeren bir karma tablosunun şematik gösterimi. Beşinci konumdaki değer yeşil renkte.

  • "lasagna"yı bul
    • hash("lasagna") -> 5
    • 14,75 döndür
  • $O(1)$
Python'da Veri Yapıları ve Algoritmalar

Çakışmalar

  • Karma fonksiyonları farklı girdiler için aynı çıktıyı verebilir
  • hash("moussaka") -> 1

Bazı değerler içeren bir karma tablosunun şematik gösterimi. İlk konumdaki değer sarı renkte.

  • ekle: moussaka -> 21,15
  • Çakışma!
    • çözülmeli
    • çeşitli teknikler
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü

  • Boş sözlük
my_empty_dictionary = {}
  • Öğeler içeren sözlük
my_menu = {
    'lasagna': 14.75,
    'moussaka': 21.15,
    'sushi': 16.05
}
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - get

print(my_menu['sushi'])
16.05
print(my_menu['paella'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'paella'
print(my_menu.get('paella'))
None
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - items, keys & values

  • Öğeleri al
print(my_menu.items())
dict_items([('lasanga', 14.75), 
            ('moussaka', 21.15),
            ('sushi', 16.05)])
  • Anahtarları al
print(my_menu.keys())
dict_keys(['lasanga', 'moussaka', 'sushi'])
  • Değerleri al
print(my_menu.values())
dict_values([14.75, 21.15, 16.05])
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - ekleme

my_menu['samosas'] = 13

print(my_menu.items())
dict_items([('lasanga', 14.75), ('moussaka', 21.15), ('sushi', 16.05), ('samosas', 13)])
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - değiştirme

print(my_menu.get('sushi'))
16.05
my_menu['sushi'] = 20

print(my_menu.get('sushi'))
20
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - kaldırma

  • Bir sözlüğü tamamen siler
del my_menu
  • Bir anahtar-değer çiftini kaldırır
del my_menu["sushi"]
  • Bir sözlüğü boşaltır
my_menu.clear()
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - yineleme

for key, value in my_menu.items():
  print(f"\nkey: {key}")
  print(f"value: {value}")
key: lasagna
value: 14.75

key: moussaka
value: 21.15

key: sushi
value: 16.05
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - yineleme

for dish in my_menu:
  print(dish)
lasagna
moussaka
sushi
for prices in my_menu.values():
  print(prices)
14.75
21.15
16.05
Python'da Veri Yapıları ve Algoritmalar

Python sözlüğü - iç içe sözlükler

  • İç içe sözlük
my_menu = {
  'sushi' : {
    'price' : 19.25,
    'best_served' : 'cold'
  },
  'paella' : {
    'price' : 15,
    'best_served' : 'hot'
  }
}
Python'da Veri Yapıları ve Algoritmalar

Hadi pratik yapalım!

Python'da Veri Yapıları ve Algoritmalar

Preparing Video For Download...