1379

Python Dersleri: Baştan Sona Python Programlama Eğitimi

Python Dictionary

Pythonda dictionary (sözlük) veri yapısı nedir ve nasıl kullanılır?



Python Dictionary

Python collection veri tiplerinden olan dictionary yani sözlük veri yapısı key ve value şeklinde verileri saklayabileceğimiz bir veri yapısıdır. Dictionary veri yapısı Json veri yapısına oldukça benzerdir.

Dictionary liste elemanlarına key ve value değerlerine göre ulaşıp elemanlar üzerinde güncelleme yapabiliriz. (araç plakası ve il bilgisi gibi. {41: "Kocaeli"})

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

print(ogrenci)  # { "numara": "120", "ad": "Ahmet", "soyad": "Yılmaz" }

Gördüğünüz tek bir sözlük objesi içinde bir öğrencinin numara, ad ve soyad bilgisini taşıyabiliyoruz.

Sözlük veri yapısını kullanmadan tanımlayacağımız iki farklı bilgiyi ayrı ayrı listeler içerisinde tutabiliriz.

Örnek

sehirler = ['kocaeli','istanbul']
plakalar = [41, 34]

Eğer ki; istanbul' un plaka kodunu almak istersek şu şekilde yapabiliriz;

Örnek

print(plakalar[sehirler.index('istanbul')]) # 34

sehirler.index('istanbul') ile istanbul' un liste içindeki konumunu bulup o konum bilgisi ile (indeks) diğer listeden 34 bilgisini alabiliriz.

Burada 2 farklı liste tanımlamak yerine tek bir sözlük veri yapısı tanımlamış olsak işimiz çok daha kolay olur.

Örnek

plakalar = { 'kocaeli' : 41, 'istanbul': 34 }
print(plakalar['kocaeli'])   # 41
print(plakalar['istanbul'])  # 34

Dictionary Elemanlarına Erişim

Dictionary elemanlarının value bilgisine köşeli parantezler içerisine yazdığımız key ile ulaşabiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

print(ogrenci["numara"]) # 120
print(ogrenci["ad"])     # Ahmet
print(ogrenci["soyad"])  # Yılmaz

Ayrıca köşeli parantez yerine get() metodunuda kullanabiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

numara = ogrenci.get("numara")
ad = ogrenci.get("ad")
soyad = ogrenci.get("soyad")

print(numara,ad,soyad)  # 120 Ahmet Yılmaz

Dictionary Elemanlarına Döngü ile Erişim

Sözlük veri yapısında her bir eleman key ve value birleşiminden oluştuğundan dolayı key mi, value mu yoksa her ikisini de almak mı istiyorsunuz ?

Örnek

user = {
      username = "sadikturan",
      password = "123456",
      email = "info@sadikturan.com",
      phone = "05320000000"
}

for i in user:
   print(i)

username, password, email, phone bilgileri alt alta key bilgileri gelecektir.

Eğer ki, value bilgilerini almak istiyorsak user[i] şeklinde her bir elemanın value bilgisine ulaşmalıyız.

Örnek

for i in user:
   print(user[i])

Bu durumda ekran çıktısı olarak "sadikturan 123456 info@sadikturan.com 05320000000" bilgileri alt alta gelir.

Ya da aynı şekilde value bilgilerine aşağıdaki gibi de values() ile de ulaşabiliriz.

Örnek

for i in user.values():
   print(i)

items()  metodu ile hem key hem de value bilgilerine ulaşabiliriz.

Örnek

for a,b in user.items():
   print(a,b)

Bu durumda ekran çıktısı olarak key ve value bilgileri aynı anda a ve b değişkenleri içerisine sırasıyla kopyalanır.

username sadikturan

password 123456

email info@sadikturan.com

phone 05320000000

Dictionary Elemanlarını Güncelleme

key bilgisi ile ulaştığınız bir elemanın value değerini değiştirebiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

ogrenci["numara" ] = 220
print(ogrenci)  # { "numara": "220", "ad": "Ahmet", "soyad": "Yılmaz" }

Dictionary' e Yeni Eleman Ekleme

Yeni bir eleman eklemek için olmayan bir key bilgisi eklememiz yeterlidir.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

ogrenci["cinsiyet"] = "E"
print(ogrenci) # { "numara": "220", "ad": "Ahmet", "soyad": "Yılmaz" ,"cinsiyet":"E"}

Dictionary' den Eleman Silme

pop() metodu ile sözlük veri yapısından belirttiğimiz key bilgisi ile veriyi silebiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

ogrenci.pop("numara")
print(ogrenci) # { "ad": "Ahmet", "soyad": "Yılmaz"}

Aynı şekilde del komutunu kullanarak da istediğimiz key bilgisiyle veri silebiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

del ogrenci["numara"]
print(ogrenci) # { "ad": "Ahmet", "soyad": "Yılmaz"}

del komutu ile key bilgisi vermeden dictionary objesini bellekten silebiliriz. 

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

del ogrenci
print(ogrenci) # NameError: name 'ogrenci' is not defined

Sildikten sonra ogrenci objesine ulaşmak istediğimizde NameError alırız çünkü ogrenci objesi bellekte yer almak.

Eğer ki dictionary elemanlarının hersini silmek istiyorsak clear() metodunu kullanabiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

ogrenci.clear()
print(ogrenci) # { }

Sildikten sonra ogrenci objesine ulaşmak istediğimizde boş obje tanımlaması ile karşılaşırız. ({ })

Sözlük verisinin son elemanını silmek için popitem() metodunu kullanabiliriz.

Örnek

ogrenci = {
  "numara": "120",
  "ad": "Ahmet",
  "soyad": "Yılmaz"
}

ogrenci.popitem()
print(ogrenci) # { "numara": "120", "ad": "Ahmet"}

İç içe Dictionary Tanımlama

Tanımlanan bir sözlük verisini bir başka liste elemanı içerisine alabileceğimiz gibi bir başka sözlük veri yapısı içine de alabiliriz.

Örnek

users = {
    'sadikturan': {
        'age': 36,        
        'roles': ['user'],
        'email': 'sadik@gmail.com',
        'address': 'kocaeli',
        'phone': '1231321'
    },
    'cinarturan': {
        'age': 2,
        'roles': ['admin','user'],
        'email': 'cinar@gmail.com',
        'address': 'kocaeli',
        'phone': '1231321'
    }
}

Burada users objesinin 2 elemanı mevcuttur. 

Örnek

print(users['cinarturan'])

Ekran çıktısı;

{ 'age': 2, 'roles': ['admin','user'], 'email': 'cinar@gmail.com', 'address': 'kocaeli', 'phone': '1231321' } 

Gördüğümüz gibi 'cinarturan' ya da 'sadikturan' ile içteki her bir sözlük verisine ulaşabiliriz ve ulaştığımız 2 sözlük veri yapısı içinde de diğer elemanlara ulaşmak için ise;

Örnek

print(users['cinarturan']['age'])

Bu durumda ekran çıktısı olarak 2 bilgisini alırız.

Ya da;

Örnek

print(users['cinarturan']['roles'])

Dediğimizde ise ['admin', 'user'] bilgisi karşımıza gelecektir.

Python Dictionary Uygulaması

ogrenciler = {
        '120': {
            'ad': 'Ali',
            'soyad': 'Yılmaz',
            'telefon': '532 000 00 01'
        },
        '125': {
            'ad': 'Can',
            'soyad': 'Korkmaz',
            'telefon': '532 000 00 02'
        },
        '128': {
            'ad': 'Volkan',
            'soyad': 'Yükselen',
            'telefon': '532 000 00 03'
        },
    }

1- Bilgileri verilen öğrencileri kullanıcıdan aldığınız bilgilerle dictionary içinde saklayınız.

** Henüz döngüleri görmediğimizden dolayı input() ile bilgi alma işlemini 3 öğrenci için tekrarlayabilirsiniz.

ogrenciler = {}

number = input("öğrenci no: ")
name = input("öğrenci adı: ")
surname = input("öğrenci soyad: ")
phone = input("öğrenci telefon: ")

ogrenciler.update({
    number: {
        'ad': name,
        'soyad': surname,
        'telefon':phone 
    }
})

number = input("öğrenci no: ")
name = input("öğrenci adı: ")
surname = input("öğrenci soyad: ")
phone = input("öğrenci telefon: ")

ogrenciler.update({
    number: {
        'ad': name,
        'soyad': surname,
        'telefon':phone 
    }
})

number = input("öğrenci no: ")
name = input("öğrenci adı: ")
surname = input("öğrenci soyad: ")
phone = input("öğrenci telefon: ")

ogrenciler.update({
    number: {
        'ad': name,
        'soyad': surname,
        'telefon':phone 
    }
})

2- Öğrenci numarasını kullanıcıdan alıp ilgili öğrenci bilgisini gösterin.

ogrNo = input('öğrenci no: ')
ogrenci = ogrenciler[ogrNo]
print(ogrenci)

print(f"Aradığınız {ogrNo} nolu öğrencinin adı: {ogrenci['ad']} soyadı: {ogrenci['soyad']} ve telefonu ise {ogrenci['telefon']}")