SORU
19 EYLÜL 2010, Pazar


Neden sesleniyorsun .python bir sözlük üzerinden yineleme ne zaman? () iteritems

Neden iteritems() bir sözlük, anahtar değer çiftleri üzerinde yineleme çağrısı var mı? yani

dic = {'one':'1', 'two':'2'}
for k, v in dic.iteritems():
    print k, v

Bu yüzden bir sözlük üzerinden yineleme varsayılan davranış değil

for k, v in dic:
    print k, v

CEVAP
19 EYLÜL 2010, Pazar


Her python konteyner C, beklenti için olduğunu

for item in C:
    assert item in C

iyi geçecek -- olmazsanaeğer in (döngü deyimi) bir anlamda diğer (durum kontrol) tamamen farklı bir anlamı olsaydı bunu şaşırtıcı bulabilirsiniz? Emin ol yaparım! Doğal olarak listeler için bu şekilde çalışıyor, ayarlar, dizilerini, ...

Bu yüzden, ne zaman C sözlük, in teslim anahtar/değer dizilerini bir for döngü, sonra, tarafından, en az ilkesini şaşkınlık, in de almak gibi bir başlık olarak sol işlenen olarak muhafaza edin.

Ne kadar yararlı olurdu? Çok işe yaramaz aslında, temelde yapma if (key, value) in C eşanlamlı if C.get(key) == value -- hangi bir onay inanıyorum ben yapılan ya da istediğini gerçekleştirmek için, 100 kat daha nadiren daha ne if k in C aslındademektirbu anahtar varlığını kontrol ediyorumsadeceve tamamen değeri göz ardı ediliyor.

Diğer taraftan, sadece anahtarları döngü isteyen oldukça yaygındır, örneğin:

for k in thedict:
    thedict[k]  = 1

de değeri olan ve özellikle yardımcı olur:

for k, v in thedict.items():
    thedict[k] = v   1

aslında az ve öz biraz daha net. (Not items orijinal yazım "doğru" yöntemler kullanmak için anahtar/değer çiftleri: ne yazık ki o geri gün ne zaman böyle erişenleri döndü bütün listeler, bu yüzden destek "sadece yineleme" alternatif bir yazım vardı tanıştırmak gerekir, ve iteritems olduğunu ... ... Python 3, nerede geriye uyumluluk kısıtlamaları ile önceki Python sürümleri çok zayıf oldu items tekrar).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Professor Messer

    Professor Me

    27 NİSAN 2007
  • TechRax

    TechRax

    21 EYLÜL 2009
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011