Saya mencoba mengakses elemen dict_key dengan indeksnya:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
Saya ingin mendapatkan foo
.
sama dengan:
keys[0]
TypeError: 'dict_keys' object does not support indexing
Bagaimana saya bisa melakukan ini?
python
dictionary
python-3.x
key
fj123x
sumber
sumber
dict.keys()
mengembalikan set seperti objek tampilan, bukan daftar (jadi, pengindeksan tidak mungkin). Gunakankeys = list(test)
collections.OrderedDict
jika Anda ingin kunci yang dipesan)Jawaban:
Panggil
list()
kamus sebagai gantinya:Dalam Python 3,
dict.keys()
metode ini mengembalikan objek tampilan kamus , yang bertindak sebagai satu set. Iterasi kamus secara langsung juga menghasilkan kunci, jadi mengubah kamus menjadi daftar menghasilkan daftar semua kunci:sumber
dict
subkelas, misalnya, di mana.keys()
ditangani dengan kode Python (misal, pengalihan utas dapat dilakukan).sorted(dict)
akan melakukan hal yang persis sama; menghasilkan daftar kunci dalam urutan diurutkan.list(dict)
akan memberi Anda daftar dalam urutan kamus.keys = [*test]
Bukan jawaban yang lengkap tapi mungkin petunjuk yang bermanfaat. Jika ini benar-benar item pertama yang Anda inginkan *, maka
jauh lebih cepat daripada
untuk dikte besar, karena semuanya tidak harus disimpan dalam memori.
Untuk 10.000.000 item, saya menemukannya hampir 40.000 kali lebih cepat.
* Item pertama dalam hal dict hanya item pseudo-acak sebelum Python 3.6 (setelah itu dipesan dalam implementasi standar, meskipun tidak disarankan untuk bergantung padanya).
sumber
Saya ingin pasangan "kunci" & "nilai" dari item kamus pertama. Saya menggunakan kode berikut.
sumber
Cara konvensional menambahkan kunci ke daftar yang ditentukan secara statis dan kemudian mengindeksnya untuk hal yang sama
sumber
ls = list(test.keys())
? Saya merasa lebih sederhana.Dalam banyak kasus, ini mungkin merupakan Masalah XY . Mengapa Anda mengindeks kunci kamus Anda berdasarkan posisi? Apakah Anda benar-benar perlu? Sampai baru-baru ini, kamus bahkan tidak dipesan dengan Python, sehingga mengakses elemen pertama adalah sewenang-wenang.
Saya baru saja menerjemahkan beberapa kode Python 2 ke Python 3:
yang tidak cantik, tapi juga tidak terlalu buruk. Pada awalnya, saya akan menggantinya dengan monster itu
sebelum saya menyadari ini jauh lebih baik ditulis sebagai
yang bekerja dengan baik.
Saya percaya bahwa dalam banyak kasus lain, pengindeksan kunci kamus berdasarkan posisi dapat dihindari. Meskipun kamus diperintahkan dalam Python 3.7, dengan mengandalkan itu tidak cantik. Kode di atas hanya berfungsi karena konten
some_list
baru saja dihasilkan dari kontend
.Perhatikan kode Anda dengan saksama jika Anda benar-benar perlu mengakses
disk_keys
elemen dengan indeks. Mungkin Anda tidak perlu melakukannya.sumber
Coba ini
Hasilnya terlihat seperti ini. ['foo', 'hello']
Anda dapat menemukan lebih banyak solusi yang mungkin di sini .
sumber