Mengapa Kunci Kamus dalam Versi Python Lama Tidak Sentiasa Dipesan?

Susan Sarandon
Lepaskan: 2024-11-19 04:23:02
asal
270 orang telah melayarinya

Why Are Dictionary Keys in Older Python Versions Not Always Ordered?

Susunan Kunci dalam Kamus dalam Versi Lama Python

Dalam versi Python sebelum 3.6, susunan kunci dalam kamus tidak dijamin. Ini boleh membawa kepada hasil yang tidak dijangka apabila melelakan kamus atau mengakses kekuncinya.

Untuk memahami isu tersebut, pertimbangkan kod berikut:

d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print(l)
Salin selepas log masuk

Dalam contoh ini, kaedah keys() mengembalikan senarai kunci dalam kamus. Walau bagaimanapun, susunan kekunci dalam senarai tidak dijamin. Dalam Python versi 2.7 dan lebih awal, kunci telah dikembalikan dalam susunan sisipan. Walau bagaimanapun, dalam Python 3.0 dan seterusnya, kunci dikembalikan dalam susunan sewenang-wenangnya.

Ketidakkonsistenan ini boleh menjadi masalah jika anda bergantung pada susunan kekunci dalam kamus. Contohnya, jika anda menggunakan kamus untuk menyimpan item dalam senarai runcit, anda mungkin menjangkakan kunci akan dikembalikan mengikut susunan yang anda tambahkan pada kamus. Walau bagaimanapun, dalam Python versi 3.0 dan seterusnya, ini tidak dijamin.

Kepada 解决这个问题,有两种选择。第一个是使用 koleksi.OrderedDict类。这个类提供了对插入顺序的保证。以下代码展示了如何使用OrderedDict:

from collections import OrderedDict

d = OrderedDict([('a', 0), ('b', 1), ('c', 2)])
l = list(d.keys())
print(l)  # ['a', 'b', 'c']
Salin selepas log masuk

另一个选择是使用 sorted() berfungsi untuk mengisih kekunci dalam tertib menaik. Walau bagaimanapun, ini memerlukan langkah tambahan dan mungkin tidak selalu menjadi tingkah laku yang diingini.

Untuk versi Python 3.6 dan lebih baharu, kamus secara lalai mengekalkan susunan sisipan. Walau bagaimanapun, masih disyorkan untuk menggunakan OrderedDict jika anda memerlukan susunan sisipan yang terjamin merentas pelaksanaan Python yang berbeza.

Atas ialah kandungan terperinci Mengapa Kunci Kamus dalam Versi Python Lama Tidak Sentiasa Dipesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan