Lesson 11
Sözlükler
1. Sözlükler
Normal listeler (diziler) genellikle bir numaralandırılmış öğeler kümesidir, bu yüzden herhangi bir liste öğesine bir referans yapmak isterseniz, numarasını belirtmeniz gerekir. Listedeki öğe sayısı, öğenin kendisini benzersiz olarak tanımlar. Ancak kimlik numaraları her zaman uygun değildir. Örneğin, Rusya'daki tren güzergahları kimlik ve kod olarak tanımlama kodu (sayı ve bir rakam) kullanmaktadır. Ayrıca sayısal alfabetik kod uçuşları tanımlamaktadır, yani uçuşlar, trenler veya uçak kimliği ile ilgili bilgiler sayı olarak değil, bir metin dizesi.
Sayısal yerine keyfi bir indeks türünün kullanılmasına izin veren veri yapısı, sözlük veya çağrıştırıcı dizi olarak adlandırılır. Python'daki ilgili veri yapısı dict
olarak adlandırılır.
Basit bir örnek düşünün. İndeks ülkenin adı ve bu ülkenin sermayesinin adı olan sözlük Capitals
alın. Şimdi ülkenin adını taşıyan bir sıra için başkentini kolaylıkla belirleyebiliriz.
# Boş dict Capitals oluştur Capitals = dict() # Bazı değerler ile doldurun Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' Countries = ['Russia', 'France', 'USA', 'Russia'] for country in Countries: # Listedeki her ülke için sözlük Başkentinde olup olmadığını kontrol edin if country in Capitals: print('The capital of ' + country + ' is ' + Capitals[country]) else: print('The capital of ' + country + ' is unknown')
Yani, sözlüğün her elemanı iki nesneden oluşur: anahtar ve değerler . Bizim örneğimizde, anahtar ülke adıdır ve değer sermayenin adıdır. Anahtar, sözlüğün elemanını tanımlar, değer verilen tuşa karşılık gelen değerdir. Anahtar değerler benzersizdir, yani sözlükte iki aynı anahtar olamaz.
Çevremizdeki sözlüklere, olağan kâğıt sözlüklerine (tanımlayan, tek dilli, iki dilli) alışkınız. Sözlük tanımlamak için anahtar sözcük (makalenin başlığı) kelimedir ve değer makalenin kendisidir ve makaleye erişmek için sözcük anahtarını belirtmeniz gerekir.
Bir telefon rehberi, sözlük veri yapısının başka bir örneğidir. Bu durumda, anahtar isim ve değer telefon numarasıdır. Hem sözlük hem de telefon rehberi için, belirli bir tuşla sözlüğün bir elemanını bulmak kolaydır (örneğin, kayıtların anahtarların alfabetik sırayla saklanması durumunda, anahtarınızı bir ikili arama ile kolayca bulabilirsiniz), ancak bilinmiyor ve yalnızca değeri biliyoruz, verilen değerle elemanın aranması, sözlüğün tüm öğelerinin tutarlı bir görünümünü gerektirebilir.
İlişkilendirici dizinin önemli bir özelliği de dinamik olmasıdır, yani herhangi bir tuşla yeni öğeler ekleyebilir ve mevcut öğeleri silebilirsiniz. Kullanılan bellek miktarı ilişkisel dizinin büyüklüğü ile orantılıdır. İlişkilendirici bir dizinin öğelerine erişim, sıradan dizilerden daha yavaştır, ancak yine de oldukça hızlıdır.
Python'da, anahtar herhangi bir değişmez (değiştirilemez) veri tipi olabilir: tam sayılar ve gerçek sayılar, dizeler, tupller. Sözlükteki anahtar bir küme olmayabilir, ancak frozenset
tipi bir eleman olabilir: frozenset
sonra değiştirilemeyen bir tip set
özel bir veri türü analogu. Sözlük öğesi değeri değiştirilebilir de dahil olmak üzere herhangi bir veri türü olabilir.
2. Sözlükleri uygulama
Sözlükler aşağıdaki durumlarda kullanılır:
Num['January'] = 1; Num['February'] = 2; ...
Boş bir sözlük, dict()
işlevi veya boş bir çift parantez {}
(bu aslında küme parantezlerinin boş bir set oluşturmak için kullanılamamasının sebebidir). Bazı başlangıç değerlerini içeren bir sözlük oluşturmak için aşağıdaki yapıları kullanabilirsiniz:
Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'} Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) print(Capitals)
İlk iki yöntem sadece tüm öğeleri listeleyerek küçük sözlükler oluşturmak için kullanılabilir. Buna ek olarak, ikinci yöntemde, anahtarlar, dict
olarak adlandırılan parametreler olarak geçirilir, bu nedenle, tuşlar sadece dizeler ve sadece doğru tanımlayıcılar olabilir. Üçüncü ve dördüncü durumda, aktarılan argümanlar hazır bir liste ise, ancak tüm öğeleri listeleyerek değil, programın yürütülmesi sırasında başka bir şekilde oluşturulmuşsa, büyük sözlükler oluşturabilirsiniz. Üçüncü şekilde işlev dict
anahtar ve değer: her bir eleman bir elementin bir demet bir listesini alma gerekmektedir. Dördüncü yöntem, eşit uzunluktaki iki listeyi alması gereken işlev zip
kullanır: bir anahtar listesi ve değer listesi.
3. Sözlük öğeleriyle çalışma
Temel işlem: öğenin anahtarıyla değerini almak. Tam olarak listeler için yazılmıştır: A[key]
. Sözlükte anahtarda belirtilen herhangi bir öğe yoksa, KeyError
istisnasını yükseltir.
Bir anahtara göre değeri tanımlamak için başka bir yolu bir yöntemdir get
: A.get(key)
. Anahtar sahip herhangi bir öğe varsa get
sözlükte, Döndürdüğü None
. Iki bağımsız değişken ile formunda A.get(key, val)
yöntemi döner val
önemli bir unsur ise, key
sözlükte değildir.
Bir öğe bir sözlük operasyonlara ait olmadığını kontrol etmek için in
ve not in
kümeleri için aynı kullanılmaktadır.
Sözlüğe yeni bir öğe eklemek için sadece bir değer atamanız yeterlidir: A[key] = value
.
Bir öğeyi sözlüğünden kaldırmak için del A[key]
(işlem, sözlüğünde böyle bir anahtar yoksa, bir KeyError
istisnası oluşturur.) Bir öğeyi sözlüğünden kaldırmanın iki güvenli yolu aşağıda verilmiştir.
A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key] try: del A[key] except KeyError: print('There is no element with key "' + key + '" in dict') print(A)
İlk durumda, bir elemanın varlığını önceden kontrol ederiz, sonra istisnaları yakalarız ve ele alırız.
Sözlükten bir öğeyi kaldırmak için başka bir yol yöntemidir pop
: A.pop(key)
. Bu yöntem, kaldırılan öğenin değerini döndürür ve belirtilen anahtarla öğe sözlükte değilse, bir istisna kaldırılır. Yöntem pop
, eksik bir eleman için ikinci bir parametre alırsa, bu parametrenin değerini döndürecektir. Bu, öğenin sözlüğünden güvenli bir şekilde ayrılmasını sağlar: A.pop(key, None)
.
4. Yinelenen sözlük
Sözlükteki tüm öğelerin anahtarlarını kolayca yineleyebilirsiniz:
A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])
Aşağıdaki yöntemler, sözlüğün öğelerinin temsilini döndürür. Temsiller setlere benzer, ancak elemanların değerlerini değiştirirseniz değişirler. Yöntem keys
, tüm öğelerin anahtarlarının bir temsilini döndürür, values
tüm değerlerin bir temsilini döndürür ve yöntem items
, anahtarların ve değerlerin tüm çiftlerinin (tuples) bir temsilini döndürür.
Böylece, hızlı tarama için değeri olmadığını val
sözlüğü tüm değerleri arasında yer alan A
Eğer boolean koşul kullanmalıdır val in A.values()
. Anahtarlar ve değişkenler arasında geçiş yapmak için aşağıdakileri yapabilirsiniz:
A = dict(zip('abcdef', list(range(6)))) for key, val in A.items(): print(key, val)