Python 3'te Sözlükleri Anlamak
Giriş
Sözlük, Python'un yerleşik haritalama türüdür. Sözlükler anahtarları değerlere eşler ve bu anahtar-değer çiftleri Python'da veri saklamanın kullanışlı bir yolunu sunar.
Genellikle bir kimlik veya kullanıcı profili gibi birbiriyle ilişkili verileri tutmak için kullanılır ve sözlükler her iki tarafta kıvırcık ayraçlar { } ile oluşturulur.
Bilgi: Bu eğitimdeki örnek kodu takip etmek için, yerel sisteminizde python3
komutunu çalıştırarak bir Python interaktif kabuğu açın. Daha sonra, >>> isteminden sonra örnekleri kopyalayabilir, yapıştırabilir veya düzenleyebilirsiniz.
Bir sözlük şu şekilde görünür:
Tolga = {'username': 'Tolga-demir', 'online': True, 'followers': 987}
Kıvırcık ayraçların yanı sıra, sözlükte iki nokta üst üste (:
) işaretleri de bulunmaktadır.
İki nokta üst üste işaretinin solundaki kelimeler anahtarlardır. Anahtarlar, herhangi bir değiştirilemez veri türünden oluşabilir. Yukarıdaki sözlükteki anahtarlar şunlardır:
'username'
'online'
'followers'
Yukarıdaki örnekteki her bir anahtar string değerleridir.
İki nokta üst üste işaretinin sağındaki kelimeler ise değerlerdir.Değerler herhangi bir veri türünden oluşabilir. Yukarıdaki sözlükteki değerler şunlardır:
'Tolga-demir'
True
987
Bu değerlerin her biri string, Boolean veya tam sayı ( integer) tipindedir.
Sözlük olan Tolga
’yi yazdıralım:
print(Tolga)
Çıktı
{'username': 'Tolga-demir', 'followers': 987, 'online': True}
Çıktıya baktığımızda, anahtar-değer çiftlerinin sırasının değişmiş olabileceğini görebiliriz. Python 3.5 ve önceki sürümlerde, sözlük veri türü sırasızdır. Ancak Python 3.6 ve sonraki sürümlerde, sözlük veri türü sıralı olarak kalır. Sözlük sıralı olsun veya olmasın, anahtar-değer çiftleri ilişkisel anlamları temel alınarak veri erişimimize olanak tanır.
Sözlük Elemanlarına Erişim
Bir sözlüğün değerlerine, ilgili anahtarları referans göstererek çağrılabiliriz.
Anahtarlarla Veri Öğelerine Erişim
Sözlükler, veri saklamak için anahtar-değer çiftleri sundukları için Python programınızda önemli öğeler olabilirler.
Tolga’nin kullanıcı adını izole etmek istersek, bunu Tolga['username']
çağrısını yaparak yapabiliriz. Bunu yazdıralım:
print(Tolga['username'])
Çıktı
Tolga-demir
Sözlükler bir veritabanı gibi davranır, çünkü bir listede olduğu gibi belirli bir dizin değerini almak için bir tamsayı çağırmak yerine, bir değeri bir anahtara atarsınız ve o anahtarı çağırarak ilgili değeri alabilirsiniz.
'username'
anahtarını çağırarak, o anahtara karşılık gelen değeri, yani 'Tolga-demir'
değerini alırız.
Tolga
sözlüğündeki diğer değerler de aynı formatı kullanarak çağrılabilir:
Tolga['followers']
# 987 döndürür
Tolga['online']
# True döndürür
Sözlüklerin anahtar-değer çiftlerinden yararlanarak, anahtarları referans alarak değerlere erişebiliriz.
Elemanlara Erişmek İçin Metotları Kullanma
Anahtarları kullanarak değerlere erişmenin yanı sıra, bazı yerleşik metotlarla da çalışabiliriz:
dict.keys()
anahtarları izole ederdict.values()
değerleri izole ederdict.items()
öğeleri (anahtar, değer) çiftlerinden oluşan bir liste formatında döndürür
Anahtarları döndürmek için dict.keys()
metodunu kullanırdık. Örneğimizde, değişken adı kullanılarak Tolga.keys()
olurdu. Bunu print()
metoduna geçirip çıktıya bakalım:
print(Tolga.keys())
Çıktı
dict_keys(['followers', 'username', 'online'])
Çıktıda anahtarlar dict_keys
sınıfına ait bir iterable görüntü nesnesi içinde yer alır. Anahtarlar, liste formatında yazdırılır.
Bu metot, sözlükler arasında sorgu yapmak için kullanılabilir. Örneğin, iki sözlük veri yapısının ortak anahtarlarına bakabiliriz:
Tolga = {'username': 'Tolga-demir', 'online': True, 'followers': 987}
mete = {'username': 'Ahtapot', 'online': False, 'points': 723}
for common_key in Tolga.keys() & mete.keys():
print(Tolga[common_key], mete[common_key])
Tolga
ve mete
sözlükleri her biri bir kullanıcı profili sözlüğüdür.
Profillerinde farklı anahtarlar var, çünkü Tolga’nin sosyal profili ilişkili takipçileri ile, mete’nin ise puanları ile ilişkili bir oyun profili vardır. Ortak anahtarları username
ve çevrimiçi durumudur; bu küçük programı çalıştırdığımızda görebiliriz:
Çıktı
Tolga-demir Ahtapot
True False
Aynı şekilde, dict.values()
metodunu kullanarak Tolga
sözlüğündeki değerlere sorgu yapabiliriz ve Tolga.values()
olarak yapılandırılacaktır. Bunları yazdıralım:
Tolga = {'username': 'Tolga-demir', 'online': True, 'followers': 987}
print(Tolga.values())
Çıktı
dict_values([True, 'Tolga-demir', 987])
Eğer bir sözlükteki tüm öğelerle ilgileniyorsak, bunlara items()
metodu ile erişebiliriz:
print(Tolga.items())
Çıktı
dict_items([('online', True), ('username', 'Tolga-demir'), ('followers', 987)])
Bu şekilde, Tolga
sözlüğündeki öğeleri üzerinde döngü yapabiliriz ve daha okunabilir hale getirmek için bir dize ekleyebiliriz:
for key, value in Tolga.items():
print(key, 'anahtarının değeri', value)
Çıktı
online anahtarının değeri True
followers anahtarının değeri 987
username anahtarının değeri Tolga-demir
Bu bölümde, yerleşik metotları kullanarak sözlük veri yapılarındaki öğelere, değerlere ve anahtarlara erişebiliriz.
Sözlükleri Değiştirme
Sözlükler değiştirilebilir veri yapılarıdır, bu nedenle bunları değiştirebilirsiniz. Bu bölümde sözlük öğeleri ekleme ve silme işlemlerini ele alacağız.
Sözlük Öğeleri Ekleme ve Değiştirme
Bir metod veya fonksiyon kullanmadan, aşağıdaki söz dizimi ile sözlüklere anahtar-değer çiftleri ekleyebilirsiniz:
dict[key] = value
Ayrıca, var olan bir anahtara atanan değeri değiştirmek için de bu söz dizimi kullanılabilir.
Örneğin:
ferhat = {'username': 'ferhat123', 'online': True, 'followers': 305}
ferhat['followers'] = 342
print(ferhat)
Çıktı
{'username': 'ferhat123', 'followers': 342, 'online': True}
# Orijinal sözlüğü tanımla
usernames = {'Tolga': 'Tolga-demir', 'ahmet': 'ahmet87'}
# Döngü oluşturmak için while döngüsünü ayarla
while True:
# Kullanıcıdan bir isim girmesini iste
print('Bir isim girin:')
# İsim değişkenine ata
name = input()
# İsmin sözlükte olup olmadığını kontrol et ve geri bildirim ver
if name in usernames:
print(usernames[name] + ', ' + name + ' kullanıcısının adıdır.')
# Eğer isim sözlükte yoksa...
else:
# Geri bildirim sağla
print(name + ' kullanıcısının adını bilmiyorum, nedir?')
# İlgili isim için yeni bir kullanıcı adı al
username = input()
# İsim anahtarına kullanıcı adı değerini ata
usernames[name] = username
# Verinin güncellendiğine dair geri bildirim ver
print('Veri güncellendi.')
Programı komut satırında çalıştıralım:
$ python usernames.py
Programı çalıştırdığımızda şu şekilde bir çıktı alacağız:
Çıktı:
Bir isim girin:
Tolga
Tolga-demir, Tolga kullanıcısının adıdır.
Bir isim girin:
mete
mete kullanıcısının adını bilmiyorum, nedir?
Ahtapot
Veri güncellendi.
Bir isim girin:
Programı test etmeyi bitirdiğimizde, programdan çıkmak için CTRL + C
tuşlarına basabiliriz. Kod geliştirilerek bir koşul eklenip (örneğin, q
harfine basıldığında programın kapanması gibi) programı sonlandırma tetikleyicisi eklenebilir.
Bu, sözlükleri etkileşimli olarak nasıl değiştirebileceğinizi gösterir. Bu özel programda, CTRL + C
ile çıktığınız anda tüm veriler kaybolur; dosya okuma ve yazma işleme yöntemlerini ekleyerek bu sorunu çözebilirsiniz.
Ayrıca, sözlükleri dict.update()
yöntemi ile de ekleyebilir ve değiştirebiliriz. Bu yöntem, listelerde bulunan append()
yönteminden farklıdır.
Aşağıdaki mete sözlüğünde, 'followers' anahtarını ekleyelim ve mete.update()
ile bir tam sayı değeri atayalım. Ardından güncellenmiş sözlüğü print()
ile yazdıralım.
mete = {'username': 'Ahtapot', 'online': False, 'points': 723}
mete.update({'followers': 481})
print(mete)
Çıktı:
{'followers': 481, 'username': 'Ahtapot', 'points': 723, 'online': False}
Çıktıda, 'followers': 481 anahtar-değer çiftini mete sözlüğüne başarıyla eklediğimizi görebiliriz.
Aynı şekilde, var olan bir anahtar-değer çiftini değiştirmek için dict.update()
metodunu kullanabiliriz.
Tolga'nin online durumunu Tolga sözlüğünde True'dan False'a değiştirelim:
Tolga = {'username': 'Tolga-demir', 'online': True, 'followers': 987}
Tolga.update({'online': False})
print(Tolga)
Çıktı:
{'username': 'Tolga-demir', 'followers': 987, 'online': False}
Tolga.update({'online': False})
satırı var olan 'online
' anahtarını referans alarak Boolean değerini True'dan False'a değiştirdi. Sözlüğü print() ile yazdırdığımızda, güncellemenin çıktıda gerçekleştiğini görüyoruz.
Sözlüklere eleman eklemek veya değerleri değiştirmek için dict[key] = value
veya dict.update()
yöntemini kullanabiliriz.
Sözlük Elemanlarını Silme
Sözlük veri türünde anahtar-değer çiftleri ekleyebildiğiniz ve değiştirebildiğiniz gibi, sözlük içindeki elemanları da silebilirsiniz.
Bir sözlükten anahtar-değer çiftini silmek için şu söz dizimini kullanacağız:
del dict[key]
mete
adındaki kullanıcıyı temsil eden sözlüğü ele alalım. mete'nin oyun platformunu kullanmayı bıraktığını varsayalım, bu nedenle 'points' anahtarıyla ilişkili öğeyi kaldıralım. Ardından öğenin silindiğini onaylamak için sözlüğü yazdıralım:
mete = {'username': 'Ahtapot', 'online': False, 'points': 723, 'followers': 481}
del mete['points']
print(mete)
Çıktı
{'online': False, 'username': 'Ahtapot', 'followers': 481}
del mete['points']
satırı mete sözlüğünden 'points': 723
anahtar-değer çiftini kaldırır.
Bir sözlüğü tüm değerlerinden temizlemek istiyorsak, dict.clear()
yöntemini kullanabiliriz. Bu, programda daha sonra kullanmak isteyebileceğimiz bir sözlüğü tutar, ancak artık içinde herhangi bir öğe bulunmaz.
mete
sözlüğündeki tüm öğeleri kaldıralım:
mete = {'username': 'Ahtapot', 'online': False, 'points': 723, 'followers': 481}
mete.clear()
print(mete)
Çıktı: {}
Çıktıda, artık anahtar-değer çiftlerinden yoksun boş bir sözlüğe sahip olduğumuzu görüyoruz.
Artık belirli bir sözlüğe ihtiyacımız yoksa, onu tamamen kaldırmak için del
komutunu kullanabiliriz:
del mete
print(mete)
Bir sözlük silindikten sonra print() ile çağrı yaptığımızda şu hatayı alırız:
Çıktı:
...
NameError: name 'mete' is not defined
Sözlükler değiştirilebilir veri türleri olduğundan, onlara eklemeler yapılabilir, değiştirilebilir, öğeler kaldırılabilir ve temizlenebilir.
Sonuç
Bu öğretici, Python'daki sözlük veri yapısını ele aldı. Sözlükler anahtar-değer çiftlerinden oluşur ve indekslemeye gerek duymadan veri depolamanın bir yolunu sunar. Bu, verileri anlamlarına ve diğer veri türleriyle ilişkilerine göre geri almayı sağlar.
Lisa Tagliaferri tarafından yazılan Understanding Dictionaries in Python 3 a Programming makalesinin düzenlenmiş çevirisi
Daha Fazla Oku:
- Sonraki Makale: Python 3'te Modül Nasıl İçe Aktarılır
- Önceki Makale: Python 3'te Tuple'ları Anlamak