2.9. Sözlükler

Bir sözlük, anahtarlardan değerlere bir eşlemedir. Her anahtar doğrudan aranır; sözlük, o anahtarla en son hangi değerin ilişkilendirildiğini hatırlar.

2.9.1. Sözlük oluşturma

Süslü parantezlerle key: value çiftleri kullanın veya dict yapıcısını kullanın:

empty   = {}
person  = {"name": "OpenMV", "id": 42}
counts  = dict(a=1, b=2, c=3)            # keyword form
pairs   = dict([("x", 1), ("y", 2)])     # from a list of pairs

Değerler herhangi bir tür olabilir – dizeler, sayılar, listeler, hatta başka sözlükler:

config = {
    "name":  "OpenMV",
    "id":    42,
    "width": 320,
    "tags":  ["red", "round"],
}
İki sütun olarak gösterilen bir sözlük: solda anahtarlar, sağda değerler, her çifti birbirine bağlayan oklarla.

Bir sözlükteki her anahtar tam olarak bir değere eşlenir.

2.9.2. Erişim ve üyelik

[] ile indeksleme, bir anahtara karşılık gelen değeri getirir. Bulunamayan bir anahtar KeyError hatası verir:

>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'

Hoşgörülü bir arama için dict.get() kullanın. Bulunamayan bir anahtar için None döndürür ya da ikinci argüman olarak geçtiğiniz bir değeri döndürür:

>>> person.get("name")
'OpenMV'
>>> person.get("missing")            # returns None
>>> person.get("missing", "n/a")
'n/a'

in anahtar sözcüğü, değer değil anahtar üyeliğini sınar:

>>> "name" in person
True
>>> "OpenMV" in person
False

2.9.3. Ekleme, güncelleme ve kaldırma

d[key] öğesine atama yapmak, anahtar yeniyse girdiyi ekler ve zaten varsa üzerine yazar:

>>> person["seen"] = 1
>>> person["seen"] = 2               # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}

Kaldırmanın birkaç biçimi vardır:

  • del d[key] – bir girdiyi kaldırır; anahtar yoksa KeyError hatası verir.

  • dict.pop() – değeri kaldırır ve döndürür; isteğe bağlı bir varsayılan, istisnadan kaçınmanızı sağlar.

  • dict.clear() – her girdiyi kaldırır.

dict.update(), başka bir sözlüğü (veya bir (key, value) çiftleri listesini) alıcıya birleştirir ve eşleşen anahtarların üzerine yazar:

>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}

2.9.4. Yineleme

Bir sözlük üzerinde doğrudan yineleme yapmak, anahtarlarını ekleme sırasına göre verir:

for k in person:
    print(k)

Üç görünüm açık erişim sağlar:

  • dict.keys() – anahtarlar (sözlük üzerinde yineleme yapmakla aynı).

  • dict.values() – değerler.

  • dict.items()(key, value) demetleri, bir döngüde paketlerini açmak için idealdir.

for key, value in person.items():
    print(key, "=", value)

2.9.5. Anahtar ne olabilir

Sözlük anahtarları hashlenebilir olmalıdır – değerleri yaşam süreleri boyunca değişemez. Yaygın hashlenebilir türler şunlardır:

list, dict ve bytearray gibi değiştirilebilir türler anahtar olamaz; böyle birini kullanmak TypeError hatası verir. Değiştirilemez değerlerden oluşan demetler, bir sözlüğü 2 boyutlu bir ızgara koordinatı gibi bileşik bir tanımlayıcıya göre anahtarlamanın standart yoludur:

>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"

2.9.6. Uzunluk

len(), girdilerin sayısını döndürür:

>>> len(person)
4