Sepertinya daftar yang dikembalikan oleh keys()
dan values()
metode kamus selalu berupa pemetaan 1-ke-1 (dengan asumsi kamus tidak diubah antara memanggil 2 metode).
Sebagai contoh:
>>> d = {'one':1, 'two': 2, 'three': 3}
>>> k, v = d.keys(), d.values()
>>> for i in range(len(k)):
print d[k[i]] == v[i]
True
True
True
Jika Anda tidak mengubah kamus antara menelepon keys()
dan menelepon values()
, apakah salah mengasumsikan bahwa for-loop di atas akan selalu dicetak Benar? Saya tidak dapat menemukan dokumentasi yang mengkonfirmasi hal ini.
Jawaban:
Menemukan ini:
Pada 2.x dokumentasi dan 3.x dokumentasi .
sumber
Ya, apa yang Anda amati sesungguhnya adalah properti yang dijamin - kunci (), nilai () dan item () daftar kembali dalam urutan kongruen jika dikt tersebut tidak diubah. iterkeys () & c juga beralih dalam urutan yang sama dengan daftar yang sesuai.
sumber
dataframe
menawarkan alternatif mana barang yang bisa diperbarui atau dihapus, dan ketertiban dan lokasi indeks item dalam dict-seperti struktur tetap tetap.Ya dijamin dengan python 2.x :
sumber
Iya. Dimulai dengan CPython 3.6, kamus mengembalikan item dalam urutan yang Anda masukkan .
Abaikan bagian yang mengatakan ini adalah detail implementasi. Perilaku ini dijamin dalam CPython 3.6 dan diperlukan untuk semua implementasi Python lainnya dimulai dengan Python 3.7 .
sumber
Referensi yang baik untuk dokumen. Inilah cara Anda dapat menjamin pesanan terlepas dari dokumentasi / implementasi:
sumber
Menurut http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects , metode kunci (), nilai () dan item () dan item () dari sebuah dict akan mengembalikan iterator yang sesuai dengan pesanannya. sesuai. Namun, saya tidak dapat menemukan referensi ke dokumentasi resmi untuk python 2.x untuk hal yang sama.
Sejauh yang saya tahu, jawabannya adalah ya, tetapi hanya dengan python 3.0+
sumber
Untuk apa nilainya, beberapa kode produksi berat yang saya tulis didasarkan pada asumsi ini dan saya tidak pernah punya masalah dengan itu. Saya tahu itu tidak membuatnya benar :-)
Jika Anda tidak ingin mengambil risiko, saya akan menggunakan iteritems () jika Anda bisa.
sumber
Saya tidak puas dengan jawaban ini karena saya ingin memastikan nilai yang diekspor memiliki urutan yang sama bahkan ketika menggunakan dikte yang berbeda.
Di sini Anda menentukan urutan kunci dimuka, nilai yang dikembalikan akan selalu memiliki urutan yang sama bahkan jika dikt perubahan, atau Anda menggunakan dit berbeda.
sumber