2011-12-02 20 views

cevap

6

Evet, her zaman doğrudur. Python iff tarafından garanti edilen, dördüne müdahale eden hiçbir değişiklik yoktur. Eğer olup olmadığını soruyorsan

dict((k,v) for k,v in d.iteritems())

+2

Paket açma işlemi gereksizdir, 'dict (d.iteritems()) 'de çalışır. Bu konuda, çoğu dicts (dict' dahil) özel durum eşleştirmeleri (genel olarak yinelenenlerin üzerinde) ve her neyse, her ne kadar evrensel olsa da emin değilim. – delnan

+0

@delnan Yorumunuzu dile getirdi, ancak örneğe yakın tutmayı düşünüyorum. – Triptych

+0

Asla yapmak istemeyecektiniz, çünkü d.copy() 'yi çok daha iyi olduğu için, d, (d, dititems())' veya 'dict (d.iteritems()) 'da k, v için dict ((k, v)) yapmak istemezsiniz. . – Gabe

2

:

İlgili Spec: Bu senkronizasyon dışı gidiş dict karşı korur ve önemsiz ekstra bellek kullanması nedeniyle http://docs.python.org/library/stdtypes.html#dict.items

Bu, daha genel olarak hem Anahtarlar ve değerler aynı sırada döndürülür, cevap Evet olur. documentation diyor ki: keys(), values(), iteritems(), iterkeys() ve itervalues() sözlüğe hiçbir müdahalede değişiklik ile adlandırılır

, items() Eğer listeleri karşılık doğrudan olacaktır.

Eğer dict(zip(d.keys(), d.values())) == d daima her koşulda True değerlendirecek olmadığını soruyorsanız, cevap Sen diğeri d.keys() yürütülürken d değişen biri, d.values() veya dict(...) ile, birden fazla iş parçacığı olabilir sayılı olduğunu. Bu, yukarıda belirtilen koşulların geçersiz kılınmasına müdahale eden değişiklikler oluşturacaktır.

2

Evet, bu d.items tarafından döndürülen

anahtarları ve değerleri aynı sırayla listelenmektedir :-) garantili davranışı: http://docs.python.org/library/stdtypes.html#dict.items

Not çoklu iş parçacıklı ortamlarda, bu 'u bir kerede bir defada d.keys() ve d.values() numaralı aramalar arasında bir mutasyona uğratma riskinden çok çıkarmaktır.