'For' döngülerini kullanarak sözlükler üzerinde yineleme
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
...
Python, yalnızca anahtarın sözlükten okunması gerektiğini nasıl anlar? Anahtar Python'da özel bir kelime midir? Yoksa basitçe bir değişken mi?
Sadece for
döngüler değil . Buradaki önemli kelime "yineleme" dir.
Sözlük, anahtarların değerlerle eşleştirilmesidir:
d = {'x': 1, 'y': 2, 'z': 3}
Ne zaman yinelersek, anahtarlar üzerinden yineliyoruz. Değişken adının key
sadece açıklayıcı olması amaçlanmıştır ve bu amaç için oldukça uygundur.
Bu bir liste kavrayışında olur:
>>> [k for k in d]
['x', 'y', 'z']
Sözlüğü listeye (veya başka bir koleksiyon türü nesnesine) ilettiğimizde olur:
>>> list(d)
['x', 'y', 'z']
Python'un yineleme şekli, ihtiyaç duyduğu bir bağlamda, __iter__
bir yineleyici (bu durumda bir keyiterator nesnesi) döndüren nesnenin yöntemini (bu durumda sözlük) çağırır:
>>> d.__iter__()
<dict_keyiterator object at 0x7fb1747bee08>
Bu özel yöntemleri kendimiz kullanmamalıyız, bunun yerine ilgili yerleşik işlevi kullanmak için şunu kullanmalıyız iter
:
>>> key_iterator = iter(d)
>>> key_iterator
<dict_keyiterator object at 0x7fb172fa9188>
Yineleyicilerin bir __next__
yöntemi vardır - ancak bunu yerleşik işlevle adlandırırız next
:
>>> next(key_iterator)
'x'
>>> next(key_iterator)
'y'
>>> next(key_iterator)
'z'
>>> next(key_iterator)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Bir yineleyici bittiğinde yükselir StopIteration
. Python bir for
döngüden, bir liste kavramasından, bir üreteç ifadesinden veya başka bir yinelemeli bağlamdan çıkmayı bilmektedir . Bir yineleyici yükseldiğinde StopIteration
her zaman yükseltir - tekrarlamak isterseniz, yeni bir tane gerekir.
>>> list(key_iterator)
[]
>>> new_key_iterator = iter(d)
>>> list(new_key_iterator)
['x', 'y', 'z']
Dikte etmek
Birçok bağlamda yinelemelerin yinelendiğini gördük. Gördüğümüz şey, bir dikte üzerinde her yinelediğimizde, anahtarları elde etmemizdir. Orijinal örneğe geri dön:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
Değişken adını değiştirirsek, yine de anahtarları alırız. Hadi deneyelim:
>>> for each_key in d:
... print(each_key, '=>', d[each_key])
...
x => 1
y => 2
z => 3
Değerler üzerinde yineleme yapmak istiyorsak .values
, dikte yöntemini veya her ikisi için birlikte kullanmamız gerekir .items
:
>>> list(d.values())
[1, 2, 3]
>>> list(d.items())
[('x', 1), ('y', 2), ('z', 3)]
Verilen örnekte, aşağıdaki gibi öğeler üzerinde yineleme yapmak daha verimli olacaktır:
for a_key, corresponding_value in d.items():
print(a_key, corresponding_value)
Ancak akademik amaçlar için, sorunun örneği gayet iyi.