2009-06-18 13 views
6

Olası Çoğalt: i Python dictonary varsa
Python dictionary: are keys() and values() always the same order?Aynı Sırayla Anahtarları ve Değerleri İade Etecek mi?

, .keys ve Değerler, aynı sırada karşılık gelen elemanları dönecek?

E.g. Döndürdüğü tuşları için

foo = {'foobar' : 1, 'foobar2' : 4, 'kittty' : 34743} 

:

>>> foo.keys() 
['foobar2', 'foobar', 'kittty'] 

Şimdi foo.values ​​() bunlara karşılık gelen tuşları aynı sırada hep unsurları dönecek?

cevap

17

O Python documentation geliştirmek zor:

Keys ve değerler olmayan rastgele Python uygulamaları arasında değişiklik ve eklemeler ve silmeler ve Sözlüğün tarihine bağlı keyfi bir sırada listelenir. items(), keys(), values(), iteritems(), iterkeys() ve itervalues() ve itervalues() numaralı sözlükler sözlüğe müdahale etmiyorsa, listeler doğrudan karşılık gelecektir. Bu, kullanarak (value, key) çiftlerinin oluşturulmasına olanak tanır. Aynı ilişki, iterkeys() ve itervalues() yöntemleri için de geçerlidir: pairs = zip(d.itervalues(), d.iterkeys()), çiftler için aynı değeri sağlar. Aynı liste oluşturmak için başka bir yol, keys() ve values() geçirme ifadenize aramanız arasına sözlüğü değiştirmek olmamalıdır uyarı ile, "evet" kısacası Yani pairs = [(v, k) for (k, v) in d.iteritems()]

olduğunu.

+0

Kusursuz im bu kadar aptal. Bu önemli noktayı tamamen özledim. :( – UberJumper

1

Evet, onlar

Sadece Python doc de doktor göreceksiniz:

Keys ve değerler olmayan rastgele Python uygulamaları arasında değişiklik, ve sözlük takımından bağlıdır keyfi sırayla listelenir Ekleme ve silme tarihçesi. Eğer item(), keys(), values ​​(), iteritems(), iterkeys() ve itervalues ​​(), sözlükte arayarak herhangi bir değişiklik yapılmadan çağrılırsa, listeler doğrudan karşılık gelir. yapmak

iyi şey dict.items() Python 2.6 belgelerine

1

kullanmak hala:

Keys ve değerler olmayan rastgele keyfi sırayla listelenir, Python uygulamalarına göre değişir ve sözlüğün ekleme ve silme geçmişine bağlıdır. items(), keys(), values(), iteritems(), iterkeys() ve itervalues() ve itervalues() numaralı sözlükler sözlüğe müdahale etmiyorsa, listeler doğrudan karşılık gelecektir. Bu, zip(): pairs = zip(d.values(), d.keys()) kullanarak (değer, anahtar) çiftlerinin oluşturulmasına izin verir.Aynı ilişki iterkeys() ve itervalues() yöntemleri için de geçerlidir: pairs = zip(d.itervalues(), d.iterkeys()) çiftler için aynı değeri sağlar. Aynı listeyi oluşturmanın başka bir yolu da pairs = [(v, k) for (k, v) in d.iteritems()].

Python 3.0 için aynı olanın% 99 üzerinde olduğundan eminim.

+0

Python 3.0 hakkında spekülasyon yapmanıza gerek yok, dökümantasyon burada: http://docs.python.org/3.0/library/stdtypes.html#dictionary-view-objects ve olumlu. –

İlgili konular