# # Python Sözlükler

Python koleksiyonlar (diziler) altında yer alan **sözlük (dict)** veri tipimiz *değiştirilebilen* , *indekslenebilen, çoğul elemana izin veren* ama *sıralanamayan* bir veri tipidir. Süslü parantezlerle `{ }` oluşturulur.

```python
sozluk = {}
```

Süslü parantezlere oluşturulan sözlükler, en başta elemanlarla birlikte de oluşturulabilirler.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }
```

Aynı zamanda bir sözlük **dict()** fonksiyonu ile de oluşturulabilir ve constructor yöntemiyle başlangıçta elemanları ayarlanabilir.

```python
sozluk = dict()

sozluk = dict(sehir = "Ankara", plaka = 6)
```

Daha gelişmiş bir kullanım olan **fromkeys()** fonksiyonu ile de demetleri kullanarak sözlük oluşturabilirsiniz ve tüm anahtar değerlere aynı anda bir değer atayabilirsiniz.

```python
x = ('anahtar1', 'anahtar2', 'anahtar3') 
y = 0

sozluk = dict.fromkeys(x, y)

print(sozluk) # {'anahtar2': 0, 'anahtar3': 0, 'anahtar1': 0}
```

Oluşturduğumuz `sozluk` değişkenlerinin tipini kontrol edelim.

```python
print(type(sozluk)) # <class 'dist'>
```

## 1. Sözlük Elemanlarına Erişim

Python programlama dilinde elinizdeki bir sözlüğün elemanlarına ulaşabilmek için verinin `key` yani **anahtar** kısmını kullanabilirsiniz. Aşağıdaki örnekle anahtarları nasıl kullanacağınızı gösterelim.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }
         
yil = sozluk["yil"]

print(yil) # 2019
```

Aynı erişim yöntemini **get()** fonksiyonla da kullanabilirsiniz.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

yil = sozluk.get("yil")

print(yil)         # 2019
```

## 2. Sözlük Elemanlarını Sıralayarak Ekrana Yazdırma

Yeri geldiğinde sözlük elemanlarınızı ekrana sırasıyla yazdırmak, elemanlar üzerinde sırasıyla işlem yapmak isteyebilirsiniz. Bunun için iki yöntemimiz var ve ilkiyle hemen başlayalım.

```python
sozluk = {
         "ulke" : "Türkiye",
         "sehir" : "Ankara",
         "ilce"   : "Yenimahalle"
         }


for x in sozluk:
    print("Anahtar: " + x + " -- " + "Değer: " + sozluk[x])

# Anahtar: ulke -- Değer: Türkiye
# Anahtar: sehir -- Değer: Ankara
# Anahtar: ilce -- Değer: Yenimahalle
```

Bu örnekte sözlükteki tüm anahtar kelimeleri x değeri üzerinden otomatik olarak listeledik ve bu anahtar kelimeye denk gelen değeri çektik. Şimdi ise aynı örneğimizdeki döngümüzü **items()** ve **values()** fonksiyonlarını kullanarak döndüreceğiz. İlk olarak **items()** fonksiyonu ile başlarsak `anahtar` ve `değerlerin` sırasıyla `x` ve `y` değişkenine atandığını görebiliriz.

```python
sozluk = {
         "ulke" : "Türkiye",
         "sehir" : "Ankara",
         "ilce"   : "Yenimahalle"
         }


for x,y in sozluk.items():
    print("Anahtar: " + x + " -- " + "Değer: " + y)

# Anahtar: ulke -- Değer: Türkiye
# Anahtar: sehir -- Değer: Ankara
# Anahtar: ilce -- Değer: Yenimahalle
```

Sadece **values()** fonksiyonunu kullandığımızda ise döngümüzde yalnızca değerlerin döndüğünü görebiliriz.

```python
sozluk = {
         "ulke" : "Türkiye",
         "sehir" : "Ankara",
         "ilce"   : "Yenimahalle"
         }


for x in sozluk.values():
    print(x)

# Türkiye
# Ankara
# Yenimahalle
```

{% hint style="info" %}
Sözlük elemanlarını ekrana yazdırdığınızda elemanların karışık bir halde geldiğini görürsünüz. Sözlükler sıralanamayan bir veri tipi olduğu için her seferinde elemanların yeri değişir.
{% endhint %}

## 3. Sözlük Eleman Sayısını Öğrenme

Elinizde olan bir sözlüğün eleman sayısını öğrenmek için **len()** fonksiyonunu kullanacağız.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

print(len(sozluk))    #3
```

## 4. Bir Elemanın Varlığını Kontrol Etme

Sözlükte bir **anahtarın** olup olmadığını kontrol etmek için `in` terimini kullanacağız. Eğer eleman varsa `True` , yoksa `False` değerini alırız.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

print("model" in sozluk)    # True
print("i8" in sozluk)    # False
```

## 5. Sözlüğe Yeni Eleman Ekleme

Oluşturduğumuz sözlüğe yeni bir eleman eklemek için direkt yeni anahtar-değer çiftini kullanabilirsiniz.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         }

sozluk["yil"] = 2019

print(sozluk)       # {'yil': 2019, 'marka': 'BMW', 'model': 'i8'}
```

## 6. Sözlükten Bir Eleman Çıkarmak

Sözlükten anahtar kelimeyi belirterek bir eleman çıkarmak için **pop()** fonksiyonunu kullanabiliriz.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

sozluk.pop("yil")

print(sozluk)       # {'marka': 'BMW', 'model': 'i8'}
```

Sözlük veri tipinde elemanlar sıralanamadığı için sözlükten rastgele bir eleman çıkarmak için **popitem()** fonksiyonunu kullanabiliriz.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

sozluk.popitem()

print(sozluk)       # {'model': 'i8', 'yil': 2019}
```

Eğer tek tek eleman çıkarmakla uğraşmayıp tüm elemanları sözlükten çıkarmak, sözlüğü temizlemek istiyorsanız **clear()** fonksiyonunu kullanabiliriz.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

sozluk.clear()

print(sozluk)       # {}
```

## 7. Sözlüğü Tamamen Silmek

Sözlükten elemanları çıkarmak veya sözlüğü temizlemek yerine isterseniz sözlüğü tamamen silebilirsiniz. Bunun için **del** terimini kullanabilirsiniz. Fakat sözlüğü sildikten sonra kullanmaya çalışırsanız hata alacaksınızdır.

```python
sozluk = {
         "marka" : "BMW",
         "model" : "i8",
         "yil"   : 2019
         }

del sozluk

print(sozluk)        # !!! HATA VERİR !!!
```

## 8.  **Sözlük** Kopyalamak ve Çoğaltmak

Elimizde olan bir sözlüğü kopyalayarak çoğaltmak için **copy()** fonksiyonunu kullanabilirsiniz.

```python
sozluk = {
         "sehir" : "Ankara",
         "plaka" : 6
         }

yenisozluk = sozluk.copy()

print(yenisozluk)     # {'sehir': 'Ankara', 'plaka': 6}
```

Başka bir basit yöntemde kopyalanacak sözlüğü belirterek yeni bir sözlük oluşturmaktır.

```python
sozluk = {
         "sehir" : "Ankara",
         "plaka" : 6
         }

yenisozluk = dict(sozluk)

print(yenisozluk)     # {'sehir': 'Ankara', 'plaka': 6}
```

## 9. İç İçe Sözlük Oluşturma

Dersimizin başında nasıl sözlük oluşturabileceğimizi gördük. Şimdi ise sözlük içinde sözlük, yani iç içe sözlük kullanarak nasıl sözlük değişkeni oluşturabileceğimizi göstereceğiz.

```python
sozluk = {
          "sehir1" : {
                      "sehir" : "Ankara",
                      "plaka" : 6
                     },
          "sehir2" : {
                      "sehir" : "İstanbul",
                      "plaka" : 34
                     },
         "sehir3" : {
                      "sehir" : "Kayseri",
                      "plaka" : 38
                     },
         }
```

Eğer bu kullanım biraz karışık gelmişse tüm sözlükleri ayrı ayrı oluşturup en son birleştirebilirsiniz.

```python
sehir1 = {
           "sehir" : "Ankara",
           "plaka" : 6
         }

sehir2 = {
           "sehir" : "İstanbul",
           "plaka" : 34
         }

sehir3 = {
           "sehir" : "Kayseri",
           "plaka" : 38
         }

sozluk = {
           "sehir1" : sehir1,
           "sehir2" : sehir2,
           "sehir3" : sehir3
         }
```
