Bu muhtemelen bir noob sorusudur. Python hiçbir sözlükte 'd' için bu her zaman doğru değildir: Aynı tekabül amacıyla iade anahtarları ve değerleriPython sözlüklerinde anahtar/değer tutarlılığı
dict(zip(d.keys(), d.values())) == d
musunuz?
Bu muhtemelen bir noob sorusudur. Python hiçbir sözlükte 'd' için bu her zaman doğru değildir: Aynı tekabül amacıyla iade anahtarları ve değerleriPython sözlüklerinde anahtar/değer tutarlılığı
dict(zip(d.keys(), d.values())) == d
musunuz?
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())
:
İ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.
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.
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
@delnan Yorumunuzu dile getirdi, ancak örneğe yakın tutmayı düşünüyorum. – Triptych
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