# # 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
         }
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://derslik.kerteriz.net/python-dersleri/temel-dersler/python-diziler/python-sozlukler.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
