Memeriksa apakah suatu kunci tertentu yang sudah ada dalam kamus
Saya ingin menguji apakah ada kunci dalam kamus sebelum memperbarui nilai untuk kunci. Saya menulis kode berikut:
if 'key1' in dict.keys():
print "blah"
else:
print "boo"
Saya pikir ini bukan cara terbaik untuk menyelesaikan tugas ini. Apakah ada cara yang lebih baik untuk menguji kunci dalam kamus?
2683
16
dalam
adalah cara yang dimaksudkan untuk menguji keberadaan kunci dalamdict
.Jika anda ingin default, anda dapat selalu menggunakan
dict.get()
:... dan jika anda ingin selalu memastikan nilai default untuk setiap tombol anda dapat menggunakan
defaultdict
darikoleksi
modul, seperti:... tapi secara umum,
dalam
kata kunci adalah cara terbaik untuk melakukannya.Anda don't harus menelepon kunci:
Itu akan lebih cepat karena menggunakan kamus's hashing sebagai lawan untuk melakukan pencarian linear, yang menyebut kunci yang akan dilakukan.
Anda dapat menguji keberadaan kunci dalam kamus, menggunakan di kata kunci:
Anda dapat mempersingkat ini:
Namun, ini adalah yang terbaik, kosmetik perbaikan. Mengapa anda percaya ini bukan cara terbaik?
Untuk info tambahan pada kecepatan eksekusi dari jawaban yang diterima's metode yang diusulkan (10m loop):
'kunci' di mydict
waktu berlalu 1.07 secmydict.mendapatkan('kunci')
waktu berlalu 1.84 secmydefaultdict['kunci']
waktu berlalu 1.07 secOleh karena itu menggunakan
in
ataudefaultdict
yang direkomendasikan terhadapget
.Saya akan merekomendasikan menggunakan
setdefault
metode sebaliknya. Kedengarannya seperti itu akan melakukan segala sesuatu yang anda inginkan.Kamus di python telah mendapatkan('kunci', default) metode. Sehingga anda hanya dapat mengatur nilai default dalam hal ini tidak ada kunci.
Bagaimana menggunakan EAFP (lebih mudah untuk meminta pengampunan dari izin):
Lihat yang lain JADI posting:
https://stackoverflow.com/questions/1835756/using-try-vs-if-in-python atau
https://stackoverflow.com/questions/204308/checking-for-member-existence-in-python
Menggunakan operator ternary:
Cara-cara di mana anda bisa mendapatkan hasil:
Mana yang lebih baik tergantung pada 3 hal:
Baca Lebih lanjut: http://paltman.com/try-except-performance-in-python-a-simple-test/
Penggunaan mencoba/blok bukan 'di' atau 'jika':
Python 2 saja: (dan python 2.7 mendukung `dalam` sudah)
anda dapat menggunakan has_key() metode:
Just FYI menambahkan untuk Chris. B (jawaban terbaik):
Bekerja dengan baik; alasannya adalah bahwa panggilan
int()
mengembalikan0
yang adalah apa yangdefaultdict
apakah di balik layar (ketika membangun sebuah kamus), oleh karena itu nama "Fungsi Pabrik" dalam dokumentasi.Untuk mendapatkan ide bagaimana untuk melakukan itu kita terlebih dahulu memeriksa metode apa yang dapat kita sebut di kamus. Berikut ini adalah metode-metode:
Brutal metode untuk memeriksa apakah kunci yang sudah ada dapat menjadi
get()
metode:Dua lainnya menarik metode
item()
dantombol()
terdengar seperti terlalu banyak bekerja. Jadi let's memeriksa jikaget()
adalah metode yang tepat untuk kita. Kami memiliki dictd
:Pencetakan menunjukkan kunci kita don't memiliki akan kembali
None
:Kita <menyerang>mungkin</strike> menggunakannya untuk mendapatkan info jika kunci tidak hadir atau tidak. Tapi pertimbangkan ini jika kita membuat sebuah dict dengan single
kunci:None
:Terkemuka yang
get()
metode ini tidak dapat diandalkan dalam beberapa kasus, nilai-nilai dapat menjadiTidak ada
. Cerita ini harus berakhir bahagia. Jika kita menggunakandi
pembanding:Kami mendapatkan hasil yang benar. Kita dapat memeriksa Python byte code:
Hal ini menunjukkan bahwa
dalam
membandingkan operator tidak hanya lebih dapat diandalkan, tetapi bahkan lebih cepat dariget()
.Python dictionary memiliki metode yang disebut
__memuat__
. Metode ini akan mengembalikan True jika kamus yang memiliki kunci yang lain returns False.Berbagi satu cara untuk memeriksa jika ada kunci menggunakan operator boolean.
Ini kembali
Penjelasan
Pertama, anda harus tahu bahwa dalam Python,
0
,None
, atau benda-benda dengan panjang nol mengevaluasi untukPalsu
. Segala sesuatu yang lain untuk mengevaluasiBenar
. Operasi Boolean dievaluasi dari kiri ke kanan dan kembali operan yang tidak Benar atau Palsu.Let's melihat contoh:
Sejak
'Beberapa string'
mengevaluasiBenar
, sisaatau
tidak dievaluasi dan tidak ada pembagian dengan nol kesalahan dinaikkan.Tapi jika kita beralih pesanan
1/0
dievaluasi terlebih dahulu dan menimbulkan pengecualian:Kita dapat menggunakan ini untuk pola untuk memeriksa jika ada kunci.
tidak sama seperti
Ini sudah kembali hasil yang benar jika ada kunci, tapi kami ingin mencetak 'boo' ketika itu doesn't. Jadi, kami mengambil hasilnya dan
atau
dengan'boo'
Anda dapat menggunakan
untuk
loop untuk iterate atas kamus dan mendapatkan nama kunci yang ingin anda cari dalam kamus, setelah itu periksa apakah ada atau tidak menggunakanjika
kondisi: