Pertimbangkan dikt seperti
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
Bagaimana cara saya mengakses, misalnya, elemen tertentu dari kamus ini? misalnya, saya ingin mencetak elemen pertama setelah beberapa pemformatan elemen pertama Apple yang dalam kasus kami hanya 'Amerika'?
Informasi tambahan Struktur data di atas dibuat dengan mengurai file input dalam fungsi python. Namun setelah dibuat, itu tetap sama untuk proses itu.
Saya menggunakan struktur data ini dalam fungsi saya.
Jadi jika file berubah, pada saat aplikasi ini dijalankan, konten file akan berbeda sehingga struktur data ini akan berbeda tetapi formatnya akan sama. Jadi Anda lihat saya dalam fungsi saya, saya tidak tahu bahwa elemen pertama di Apple adalah 'Amerika' atau yang lainnya jadi saya tidak bisa langsung menggunakan 'Amerika' sebagai kunci.
sumber
dict
. Kata 'dict' sudah menjadi kata kunci dalam Python. Gunakan sesuatu yang lain, sepertimydict
.Jawaban:
Mengingat bahwa ini adalah kamus, Anda mengaksesnya dengan menggunakan tombol. Mendapatkan kamus disimpan di bawah "Apple", lakukan hal berikut:
Dan mendapatkan berapa banyak dari mereka adalah orang Amerika (16), lakukan seperti ini:
sumber
.keys()
sehingga Anda dapat mengaksesnya secara dinamis."n"
pada kedalaman yang tidak diketahui, disimpan dalam elemen yang tidak diketahui.Jika pertanyaannya adalah, jika saya tahu bahwa saya memiliki diktik yang berisi 'Apel' sebagai buah dan 'Amerika' sebagai sejenis apel, saya akan menggunakan:
seperti yang disarankan orang lain. Jika sebaliknya pertanyaannya adalah, Anda tidak tahu apakah 'Apple' sebagai buah dan 'Amerika' sebagai jenis 'Apple' ada saat Anda membaca file sewenang-wenang ke dalam dict struktur data dict, Anda dapat melakukan sesuatu seperti:
atau lebih baik lagi agar Anda tidak perlu mengulang seluruh diktik jika Anda tahu bahwa hanya Apple yang memiliki tipe Amerika:
Dalam semua kasus ini, tidak masalah urutan apa yang sebenarnya disimpan kamus. Jika Anda benar-benar khawatir tentang pesanan tersebut, maka Anda dapat mempertimbangkan untuk menggunakan
OrderedDict
:http://docs.python.org/dev/library/collections.html#collections.OrderedDict
sumber
Ketika saya melihat deskripsi Anda, Anda hanya tahu bahwa parser Anda akan memberi Anda kamus yang nilainya juga kamus seperti ini:
Jadi, Anda harus mengulang kamus induk Anda. Jika Anda ingin mencetak atau mengakses semua kunci kamus pertama dalam
sampleDict.values()
daftar, Anda dapat menggunakan sesuatu seperti ini:Jika Anda hanya ingin mengakses kunci pertama dari item pertama masuk
sampleDict.values()
, ini mungkin berguna:Jika Anda menggunakan contoh yang Anda berikan dalam pertanyaan, maksud saya:
Output untuk kode pertama adalah:
Dan keluaran dari kode kedua adalah:
sumber
Sebagai bonus, saya ingin menawarkan solusi berbeda untuk masalah Anda. Anda tampaknya berurusan dengan kamus bersarang, yang biasanya membosankan, terutama ketika Anda harus memeriksa keberadaan kunci dalam.
Ada beberapa perpustakaan menarik tentang ini di pypi, berikut adalah pencarian cepat untuk Anda.
Dalam kasus khusus Anda, dict_digger tampaknya cocok.
sumber
Anda dapat menggunakan
dict['Apple'].keys()[0]
untuk mendapatkan kunci pertama diApple
kamus, tetapi tidak ada jaminan bahwa itu akan terjadiAmerican
. Urutan kunci dalam kamus dapat berubah tergantung pada konten kamus dan urutan tombol ditambahkan.sumber
OrderedDict
dicollections
perpustakaanSaya tahu ini berusia 8 tahun, tetapi tampaknya tidak ada yang benar-benar membaca dan menjawab pertanyaan itu.
Anda dapat memanggil .values () pada sebuah dict untuk mendapatkan daftar dari dalam dicts dan dengan demikian mengaksesnya dengan index.
sumber
'dict_values' object does not support indexing
. Tebak jawaban ini perlu diperbarui karena Anda perlu membungkus dict_values untuk memulihkan daftarAnda tidak dapat mengandalkan urutan kamus. Tetapi Anda dapat mencoba ini:
Jika Anda ingin agar pesanan dipertahankan, Anda mungkin ingin menggunakan ini: http://www.python.org/dev/peps/pep-0372/#ordered-dict-api
sumber
Contoh Sederhana untuk memahami cara mengakses elemen dalam kamus: -
Buat Kamus
Jelajahi lebih lanjut tentang Kamus Python dan pelajari secara interaktif di sini ...
sumber
Hanya sedikit orang yang muncul, terlepas dari banyaknya jawaban untuk pertanyaan ini, telah menunjukkan bahwa kamus adalah pemetaan yang tidak berurutan, dan karenanya (sampai berkat urutan penyisipan dengan Python 3.7) gagasan entri "pertama" dalam kamus secara harfiah dibuat tidak masuk akal. Dan bahkan
OrderedDict
hanya dapat diakses oleh indeks numerik menggunakan keburukan sepertimydict[mydict.keys()[0]]
(hanya Python 2, karena dalam Python 3keys()
adalah iterator non-subskrip.)Mulai 3.7 dan seterusnya dan dan dalam praktik di 3,6 juga - perilaku baru diperkenalkan kemudian, tetapi tidak termasuk sebagai bagian dari spesifikasi bahasa sampai 3,7 - iterasi atas kunci, nilai atau item dari suatu dikt (dan, saya percaya, a set juga) akan menghasilkan objek yang paling terakhir disisipkan terlebih dahulu. Masih belum ada cara sederhana untuk mengaksesnya dengan indeks penyisipan numerik.
Mengenai pertanyaan memilih dan "memformat" item, jika Anda mengetahui kunci yang ingin Anda ambil dalam kamus, biasanya Anda akan menggunakan kunci tersebut sebagai subskrip untuk mengambilnya (
my_var = mydict['Apple']
).Jika Anda benar-benar ingin mengindeks item dengan nomor entri (mengabaikan fakta bahwa nomor entri tertentu akan berubah saat penyisipan dibuat) maka struktur yang sesuai mungkin adalah daftar tupel dua elemen. Dari pada
Anda mungkin menggunakan:
Di bawah rezim ini entri pertama adalah
mylist[0]
dalam bentuk daftar-berakhir klasik, dan nilainya('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
. Anda dapat mengulang seluruh daftar sebagai berikut:tetapi jika Anda tahu Anda mencari kunci "Apple", mengapa Anda tidak menggunakan dict saja?
Anda dapat memperkenalkan tingkat tipuan tambahan dengan menyimpan daftar kunci ke dalam cache, tetapi kerumitan dalam menjaga dua struktur data dalam sinkronisasi pasti akan menambah kompleksitas kode Anda.
sumber
Dengan fungsi kecil berikut, menggali kamus berbentuk pohon menjadi sangat mudah:
Sekarang,
dig(mydict, "Apple.Mexican")
kembali10
, sementaradig(mydict, "Grape")
menghasilkan subtree{'Arabian':'25','Indian':'20'}
. Jika kunci tidak ada dalam kamus,dig
kembaliNone
.Perhatikan bahwa Anda dapat dengan mudah mengubah (atau bahkan membuat parameter) karakter pemisah dari '.' ke '/', '|' dll.
sumber