Jika a mydict
tidak kosong, saya mengakses elemen sewenang-wenang sebagai:
mydict[mydict.keys()[0]]
Apakah ada cara yang lebih baik untuk melakukan ini?
python
dictionary
Stan
sumber
sumber
list(mydict.keys())[0]
.Jawaban:
Pada Python 3, non-destruktif dan berulang:
Pada Python 2, non-destruktif dan berulang:
Jika Anda ingin berfungsi dalam Python 2 dan 3, Anda bisa menggunakan
six
paket:meskipun pada titik ini cukup samar dan saya lebih suka kode Anda.
Jika Anda ingin menghapus item apa pun, lakukan:
Perhatikan bahwa "pertama" mungkin bukan istilah yang sesuai di sini karena
dict
bukan tipe yang diurutkan dalam Python <3.6. Python 3.6+dicts
dipesan.sumber
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Jika Anda hanya perlu mengakses satu elemen (menjadi yang pertama secara kebetulan, karena dikt tidak menjamin pemesanan) Anda cukup melakukan ini di Python 2 :
Harap perhatikan bahwa (setahu saya) Python tidak menjamin bahwa 2 panggilan berurutan ke salah satu metode ini akan menghasilkan daftar dengan urutan yang sama. Ini tidak didukung dengan Python3.
dalam Python 3 :
sumber
list(my_dict.keys())[0]
list(my_dict.keys())[0]
bukan malas?Dalam python3, Caranya:
mengembalikan nilai dalam tipe: dict_keys (), kami akan mendapatkan kesalahan ketika mendapat anggota pertama kunci dict dengan cara ini:
Akhirnya, saya mengonversi dict.keys () ke list @ 1st, dan mendapat anggota pertama dengan metode splice list:
sumber
list(dict.values())[0]
.untuk mendapatkan kunci
untuk mendapatkan nilai
untuk mendapatkan keduanya
Dua yang pertama adalah Python 2 dan 3. Dua yang terakhir malas di Python 3, tetapi tidak dalam Python 2.
sumber
Seperti yang disebutkan lainnya, tidak ada "item pertama", karena kamus tidak memiliki urutan jaminan (mereka diimplementasikan sebagai tabel hash). Jika Anda ingin, misalnya, nilai yang sesuai dengan kunci terkecil,
thedict[min(thedict)]
akan melakukannya. Jika Anda peduli tentang urutan di mana kunci dimasukkan, yaitu, dengan "pertama" yang Anda maksudkan "dimasukkan paling awal", maka dalam Python 3.1 Anda dapat menggunakan collections.OrderedDict , yang juga dalam Python 2.7 yang akan datang; untuk versi Python yang lebih lama, unduh, instal, dan gunakan perintah dict backport (2.4 dan yang lebih baru) yang dapat Anda temukan di sini .Python 3.7 Sekarang dikt adalah perintah penyisipan.
sumber
Bagaimana dengan ini. Belum disebutkan di sini.
py 2 & 3
sumber
dict.values()
mengembalikan tampilan, jadi seharusnya O (1).list(a)
mengembalikan daftar baru, jadi akan menjadi O (n).Mengabaikan masalah seputar pemesanan dikt, mungkin ini lebih baik:
Dengan cara ini kami menghindari pencarian item dan membuat daftar kunci yang tidak kami gunakan.
Python3
sumber
next(iter(dict.values()))
mendapatkan hasil yang sama tanpa membuat daftar.Dalam python3
sumber
Anda selalu dapat melakukan:
Ini akan memberi Anda serangkaian kunci yang diurutkan secara konsisten (terkait dengan builtin .hash () saya kira) yang dapat Anda proses jika penyortiran memiliki arti bagi Anda. Itu berarti misalnya tipe numerik diurutkan secara konsisten bahkan jika Anda memperluas kamus.
CONTOH
Perhatikan bahwa kamus diurutkan saat dicetak. Tetapi set kunci pada dasarnya adalah sebuah hashmap!
sumber
Untuk Python 2 dan 3:
sumber
Is there any better way to do this?
secara singkat.sumber
Tidak ada perpustakaan eksternal, berfungsi pada Python 2.7 dan 3.x:
Untuk kunci aribtrary, cukup tinggalkan .values ()
sumber
Subclassing
dict
adalah salah satu metode, meskipun tidak efisien. Di sini jika Anda memberikan bilangan bulat, integer akan kembalid[list(d)[n]]
, jika tidak, akses kamus seperti yang diharapkan:sumber