Dictionaries - Learn Python 3 - Snakify

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.

Advertising by Google, may be based on your interests

2. Sözlükleri uygulama

Sözlükler aşağıdaki durumlarda kullanılır:

  • Bazı nesnelerin sayısını saymak için. Bu durumda, anahtarların nesne ve değerlerin miktar olduğu bir sözlük oluşturmanız gerekir.
  • Nesne ile ilişkili herhangi bir verinin depolanması. Anahtarlar nesnelerdir, değerler ilişkili verilerdir. Örneğin, ayın sıra numarasını kendi ismine göre belirlemek isterseniz, bunu sözlük Num['January'] = 1; Num['February'] = 2; ...
  • nesneler arasındaki yazışmayı ayarlama (örneğin, “ebeveyn-alt-üst”). Anahtar nesne ve değer karşılık gelen nesnedir.
  • Basit bir diziye ihtiyacınız varsa, ancak öğenin indeksinin maksimum değeri çok büyük olsa da, olası tüm indeksler kullanılmayacaktır ("seyrek dizi" olarak adlandırılır), belleği kaydetmek için ilişkisel diziyi kullanabilirsiniz.

    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.

    Advertising by Google, may be based on your interests
  • 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) .

    Advertising by Google, may be based on your interests

    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)
    
    Advertising by Google, may be based on your interests
    Advertising by Google, may be based on your interests