Dictionaries

Dictionaries sıralı olmayan ve anahtar kelime ile bulunan verilerdir. Dictionaries elemanları herhangi bir tipde olabilir ve heterojendir. Örneğin;


In [1]:
meyveler = {
    "elma": "yeşil ve kırmızı olan tatlı meyve",
    "portakal": "turuncu olan kış meyvesi",
    "limon": "sarı ekşi meyve",
    "üzüm": "kırmızı ve beyaz olan küçük meyve"}
print(meyveler)
print(meyveler["üzüm"])


{'limon': 'sarı ekşi meyve', 'portakal': 'turuncu olan kış meyvesi', 'üzüm': 'kırmızı ve beyaz olan küçük meyve', 'elma': 'yeşil ve kırmızı olan tatlı meyve'}
kırmızı ve beyaz olan küçük meyve

Burada dictionaries tanımını {} ile yapıyoruz. Fakat eleman çağırırken, [] bunu kullanıyoruz. Dictionaries'e eleman eklemek istediğimizde aşağıdaki gibi yapmamız mümkün.


In [2]:
meyveler["kayısı"] = "Değişik tip bir meyve"
print(meyveler)


{'limon': 'sarı ekşi meyve', 'portakal': 'turuncu olan kış meyvesi', 'üzüm': 'kırmızı ve beyaz olan küçük meyve', 'elma': 'yeşil ve kırmızı olan tatlı meyve', 'kayısı': 'Değişik tip bir meyve'}

Aynı anahtar kelimeyi kullanarak değerleri güncellemek mümkün. Örneğin


In [3]:
meyveler["kayısı"] = "Malatya'da yetişir."
print(meyveler)


{'limon': 'sarı ekşi meyve', 'portakal': 'turuncu olan kış meyvesi', 'üzüm': 'kırmızı ve beyaz olan küçük meyve', 'elma': 'yeşil ve kırmızı olan tatlı meyve', 'kayısı': "Malatya'da yetişir."}

Normalde olmayan bir anahtar kelime ile dictionaries sorgulanırsa hata verir. Örneğin;


In [4]:
print(meyveler["domates"])


---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-4-d63cbb841c40> in <module>()
----> 1 print(meyveler["domates"])

KeyError: 'domates'

Fakat get metodu kullanarak bu hatayı almadan da devam edebiliriz.


In [5]:
print(meyveler.get("domates"))


None

Bu noktadan sonra biraz daha güzel bir kod yazarak ifadeleri düzenleyebiliriz.


In [6]:
while True:
    DictAnahtar = input("Lütfen bir meyve ismi girin: ")
    if DictAnahtar == "çık":
        break
    Tanim = meyveler.get(DictAnahtar)
    if Tanim == None:
        print(DictAnahtar + " adında bir meyve bilgisi yok")
    else:
        print(Tanim)


---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
<ipython-input-6-f498e5421061> in <module>()
      1 while True:
----> 2     DictAnahtar = input("Lütfen bir meyve ismi girin: ")
      3     if DictAnahtar == "çık":
      4         break
      5     Tanim = meyveler.get(DictAnahtar)

C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages\ipykernel\kernelbase.py in raw_input(self, prompt)
    687         if not self._allow_stdin:
    688             raise StdinNotImplementedError(
--> 689                 "raw_input was called, but this frontend does not support input requests."
    690             )
    691         return self._input_request(str(prompt),

StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.

Get metodu daha verimli kullanmak istersek,


In [7]:
while True:
    DictAnahtar = input("Lütfen bir meyve ismi girin: ")
    if DictAnahtar == "çık":
        break
    Tanim = meyveler.get(DictAnahtar, DictAnahtar+ " adında bir meyve bilgisi yok")
    print(Tanim)


---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
<ipython-input-7-977a1073fa9b> in <module>()
      1 while True:
----> 2     DictAnahtar = input("Lütfen bir meyve ismi girin: ")
      3     if DictAnahtar == "çık":
      4         break
      5     Tanim = meyveler.get(DictAnahtar, DictAnahtar+ " adında bir meyve bilgisi yok")

C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages\ipykernel\kernelbase.py in raw_input(self, prompt)
    687         if not self._allow_stdin:
    688             raise StdinNotImplementedError(
--> 689                 "raw_input was called, but this frontend does not support input requests."
    690             )
    691         return self._input_request(str(prompt),

StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.

Dictteki deki tüm elemanları yazdırmak istersek,


In [8]:
for meyve in meyveler:
    print(meyve + " " +meyveler[meyve] )


limon sarı ekşi meyve
portakal turuncu olan kış meyvesi
üzüm kırmızı ve beyaz olan küçük meyve
elma yeşil ve kırmızı olan tatlı meyve
kayısı Malatya'da yetişir.

Dict içindeki sıralama her seferinde değişebilir. Hep aynı şekilde sıralanmasını istiyorsak, .sort() metodunu kullanmamız gerekir. Ayrıca dict içindeki anahtarları da .keys metodu kullanarak çekebiliriz.


In [9]:
SiraliAnahtar = list(meyveler.keys())
SiraliAnahtar.sort()
for anahtar in SiraliAnahtar:
    print(anahtar + " - " + meyveler[anahtar])


elma - yeşil ve kırmızı olan tatlı meyve
kayısı - Malatya'da yetişir.
limon - sarı ekşi meyve
portakal - turuncu olan kış meyvesi
üzüm - kırmızı ve beyaz olan küçük meyve

Üstteki 4 satırlık kodu daha da kısaltmak mümkün.


In [10]:
for anahtar in sorted(meyveler.keys()):
    print(anahtar + " - " + meyveler[anahtar])


elma - yeşil ve kırmızı olan tatlı meyve
kayısı - Malatya'da yetişir.
limon - sarı ekşi meyve
portakal - turuncu olan kış meyvesi
üzüm - kırmızı ve beyaz olan küçük meyve

Eğer bir giriyi silmek istersek, del komutunu kullanabiliriz.


In [11]:
del meyveler["kayısı"]
print(meyveler)


{'limon': 'sarı ekşi meyve', 'portakal': 'turuncu olan kış meyvesi', 'üzüm': 'kırmızı ve beyaz olan küçük meyve', 'elma': 'yeşil ve kırmızı olan tatlı meyve'}

Eğer meyveler dictionary tamamen temizlemek istersek, .clear komutunu kullanabiliriz. Örneğin,


In [12]:
meyveler.clear()
print(meyveler)


{}

In [13]:


In [13]:


In [ ]: