Mendapatkan: TypeError: 'dict_values' objek tidak mendukung pengindeksan ketika menggunakan python 3.2.3
Ini kode saya:
{names[i]:d.values()[i] for i in range(len(names))}
Ini bekerja benar-benar baik-baik saja ketika menggunakan python 2.7.3; namun, ketika saya menggunakan python 3.2.3, saya mendapatkan pesan kesalahan yang menyatakan 'dict_values' objek tidak mendukung pengindeksan
. Bagaimana saya bisa memodifikasi kode untuk membuatnya kompatibel untuk 3.2.3?
100
3
Di Python 3,
dict.nilai-nilai()
(bersama dengandict.kunci-kunci()
dandict.item()
) kembaliview
, daripada sebuah daftar. Lihat dokumentasi di sini. Oleh karena itu anda perlu untuk membungkus panggilan anda untukdict.nilai-nilai()
dalam panggilan untukdaftar
seperti:Sebuah versi sederhana dari kode anda akan sama:
Jika anda ingin menyimpan struktur yang sama, anda dapat mengubahnya ke:
(Anda dapat dengan mudah menempatkan
daftar(d.nilai-nilai())
dalam pemahaman bukanvlst
; it's hanya boros untuk melakukannya karena itu akan kembali membuat daftar setiap waktu).Di Python 3
dict.nilai-nilai()
kembali metode kamus view object, tidak daftar di Python 2. Kamus pandangan yang memiliki panjang, dapat iterasi, dan mendukung keanggotaan pengujian, tapi don't mendukung pengindeksan.Untuk membuat kode anda bekerja pada kedua versi, anda bisa menggunakan salah satu dari ini:
atau
Oleh jauh yang paling sederhana, cara tercepat untuk melakukan hal yang sama dalam kedua versi akan sama:
Namun perlu dicatat, bahwa semua metode ini akan memberikan anda hasil yang akan bervariasi tergantung pada isi sebenarnya dari
d
. Untuk mengatasi itu, anda mungkin dapat menggunakan OrderedDict sebaliknya, yang mengingat urutan tombol yang pertama dimasukkan ke dalamnya, sehingga anda dapat mengandalkan pesanan dari apa yang dikembalikan olehnilai-nilai()
metode.