Menghapus item dari kamus ketika utamanya adalah tidak diketahui
Apa cara terbaik untuk menghapus item dari kamus dengan nilai, yaitu ketika item's kunci yang tidak diketahui? Berikut ini's pendekatan yang sederhana:
for key, item in some_dict.items():
if item is item_to_remove:
del some_dict[key]
Ada cara yang lebih baik? Apakah ada sesuatu yang salah dengan bermutasi (menghapus item) dari kamus sementara iterasi itu?
109
10
The
dict.pop(key [default])
metode ini memungkinkan anda untuk menghapus item ketika anda tahu kuncinya. Ia mengembalikan nilai di kunci jika menghilangkan item jika tidak maka kembali apa yang dilewatkan sebagaidefault
. Lihat docs.'Contoh:
Diketahui bahwa anda're saat ini pengujian yang dilakukan untuk objek identitas (
adalah
hanya mengembalikanTrue
jika kedua operan yang diwakili oleh objek yang sama di memori - ini tidak selalu kasus dengan dua objek yang dibandingkan sama dengan==
). Jika anda melakukan ini dengan sengaja, maka anda bisa menulis ulang kode anda sebagaiTapi ini tidak dapat melakukan apa yang anda inginkan:
Jadi anda mungkin ingin
!=
bukantidak
.Perbandingan sederhana antara del dan pop():
hasilnya:
Jadi, del lebih dari pop().
I'a membangun sebuah daftar kunci yang perlu melepas, kemudian menghapusnya. It's sederhana, efisien dan menghindari masalah tentang secara bersamaan iterasi dan bermutasi dengan dict.
item()
mengembalikan daftar, dan itu adalah bahwa daftar yang anda iterasi, sehingga bermutasi yang dict dalam lingkaran doesn't peduli di sini. Jika anda menggunakaniteritems()
bukan, bermutasi yang dict dalam lingkaran akan bermasalah, dan demikian juga untukviewitems()
dalam Python 2.7.Saya dapat't memikirkan cara yang lebih baik untuk menghapus item dari dict dengan nilai.
c adalah kamus baru, dan anda asli kamus, {'z','w'} ini adalah kunci yang ingin anda hapus dari
Juga memeriksa: https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch01.html
Tidak ada yang salah dengan menghapus item dari kamus sementara iterasi, seperti anda've diusulkan. Berhati-hati tentang beberapa benang menggunakan kamus yang sama pada waktu yang sama, yang dapat mengakibatkan KeyError atau masalah lainnya.
Tentu saja, melihat dokumen di http://docs.python.org/library/stdtypes.html#typesmapping
Ini adalah bagaimana saya akan melakukannya.