Apakah mungkin untuk menambahkan kunci ke kamus Python setelah dibuat?
Tampaknya tidak memiliki .add()
metode.
python
dictionary
lookup
lfaraone
sumber
sumber
{**mydict, 'new_key': new_val}
.Jawaban:
sumber
.update()
metodenya? Mana yang lebih baik kapan?d[key]=val
sintaks karena lebih pendek dan dapat menangani objek apa pun sebagai kunci (asalkan hashable), dan hanya menetapkan satu nilai, sedangkan yang.update(key1=val1, key2=val2)
lebih bagus jika Anda ingin mengatur beberapa nilai pada saat yang sama, selama kunci tersebut adalah string (karena kwarg dikonversi ke string).dict.update
juga dapat mengambil kamus lain, tetapi saya pribadi lebih suka tidak secara eksplisit membuat kamus baru untuk memperbarui yang lain.$foo[ ] = [ . . . . ]
Untuk menambahkan beberapa tombol secara bersamaan, gunakan
dict.update()
:Untuk menambahkan satu kunci, jawaban yang diterima memiliki overhead komputasi yang lebih sedikit.
sumber
x[-1] = 44
yang-1
nilainya pada akhirnya juga. Pokoknya jawaban telah diedit dan jauh lebih baik sekarang. Memperbarui dengan kamus adalah baik ketika itu kemungkinan mengandung banyak item.Saya merasa ingin menggabungkan info tentang kamus Python:
Membuat kamus kosong
Membuat kamus dengan nilai awal
Memasukkan / Memperbarui nilai tunggal
Memasukkan / Memperbarui beberapa nilai
Membuat kamus yang digabungkan tanpa mengubah yang asli
Menghapus item dalam kamus
Periksa apakah kunci sudah ada dalam kamus
Ulangi pasangan dalam kamus
Buat kamus dari dua daftar
Baru menggunakan Python 3.5
Membuat kamus yang digabungkan tanpa mengubah yang asli:
Ini menggunakan fitur baru yang disebut kamus membongkar .
Baru menggunakan Python 3.9
Perbarui atau tambahkan nilai untuk kamus yang ada
The Operator pembaruan
|=
sekarang bekerja untuk kamus:Membuat kamus yang digabungkan tanpa mengubah yang asli
The Operator merge
|
sekarang bekerja untuk kamus:Jangan ragu untuk menambahkan lebih banyak!
sumber
Ya itu mungkin, dan memang ada metode yang mengimplementasikan ini, tetapi Anda tidak ingin menggunakannya secara langsung.
Untuk menunjukkan bagaimana dan bagaimana untuk tidak menggunakannya, mari kita membuat dict kosong dengan literal dict,
{}
:Praktik Terbaik 1: Notasi subskrip
Untuk memperbarui dict ini dengan satu kunci dan nilai baru, Anda dapat menggunakan notasi subskrip (lihat Pemetaan di sini) yang menyediakan penugasan item:
my_dict
sekarang:Praktik Terbaik 2:
update
Metode - 2 caraKami juga dapat memperbarui dict dengan beberapa nilai efisien serta menggunakan yang
update
metode . Kami mungkin tidak perlu membuat ekstra didict
sini, jadi kami berharap kamidict
telah dibuat dan berasal dari atau digunakan untuk tujuan lain:my_dict
sekarang:Cara efisien lain untuk melakukan ini dengan metode pembaruan adalah dengan argumen kata kunci, tetapi karena kata-kata itu harus kata python yang sah, Anda tidak dapat memiliki spasi atau simbol khusus atau memulai nama dengan angka, tetapi banyak yang menganggap ini cara yang lebih mudah dibaca untuk membuat kunci untuk dict, dan di sini kita tentu saja menghindari membuat yang tidak perlu
dict
:dan
my_dict
sekarang:Jadi sekarang kita telah membahas tiga cara Pythonic untuk memperbarui
dict
.Metode ajaib
__setitem__
,, dan mengapa itu harus dihindariAda cara lain untuk memperbarui
dict
yang tidak boleh Anda gunakan, yang menggunakan__setitem__
metode ini. Berikut adalah contoh bagaimana seseorang dapat menggunakan__setitem__
metode ini untuk menambahkan pasangan nilai kunci ke adict
, dan demonstrasi dari buruknya kinerja menggunakannya:Jadi kita melihat bahwa menggunakan notasi subskrip sebenarnya jauh lebih cepat daripada menggunakan
__setitem__
. Melakukan hal Pythonic, yaitu, menggunakan bahasa seperti yang dimaksudkan untuk digunakan, biasanya keduanya lebih mudah dibaca dan efisien secara komputasi.sumber
d.__setitem__
), meskipun kesimpulannya (dan terutama kalimat terakhir) tetap bagus. Mengangkat nama metode pencarian keluar dari loop mengurangi waktu menjadi sekitar 1,65 ms; perbedaan yang tersisa kemungkinan besar karena mekanisme panggilan Python yang tidak dapat dihindari.sumber
Jika Anda ingin menambahkan kamus di dalam kamus, Anda dapat melakukannya dengan cara ini.
Contoh: Tambahkan entri baru ke kamus & sub kamus Anda
Keluaran:
CATATAN: Python mengharuskan Anda pertama kali menambahkan sub
sebelum menambahkan entri.
sumber
dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}}
(atau jikadictionary
sudah menjadi dict,dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}
)Sintaks ortodoksnya adalah
d[key] = value
, tetapi jika keyboard Anda tidak memiliki kunci braket persegi yang dapat Anda lakukan:Sebenarnya, mendefinisikan
__getitem__
dan__setitem__
metode adalah bagaimana Anda dapat membuat kelas Anda sendiri mendukung sintaks braket persegi. Lihat https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_oriented_framework/special_class_methods.phpsumber
[a for a in my_dict if my_dict.update({'a': 1}) is None]
.{v: k for k, v in my_dict.items() if <some_conditional_check>}
Anda dapat membuatnya:
Memberi:
sumber
Pertanyaan populer ini membahas metode fungsional penggabungan kamus
a
danb
.Berikut adalah beberapa metode yang lebih mudah (diuji dengan Python 3) ...
Catatan: Metode pertama di atas hanya berfungsi jika kunci di dalam
b
adalah string.Untuk menambah atau memodifikasi satu elemen ,
b
kamus hanya akan memuat satu elemen ...Ini setara dengan ...
sumber
c = dict( a, **{'d':'dog'} )
akan lebih baik ditulisc = dict(a, d='dog')
, selama kunci diketahui dan tidak dihitung.Mari kita berpura-pura ingin hidup di dunia yang abadi dan TIDAK ingin memodifikasi yang asli tetapi ingin membuat yang baru
dict
adalah hasil menambahkan kunci baru ke yang asli.Dengan Python 3.5+ Anda dapat melakukan:
Setara dengan Python 2 adalah:
Setelah salah satu dari ini:
params
masih sama dengan{'a': 1, 'b': 2}
dan
new_params
adalah sama dengan{'a': 1, 'b': 2, 'c': 3}
Akan ada saat-saat ketika Anda tidak ingin memodifikasi yang asli (Anda hanya ingin hasil dari penambahan yang asli). Saya menemukan ini alternatif yang menyegarkan untuk yang berikut:
atau
Referensi: https://stackoverflow.com/a/2255892/514866
sumber
**
Python (banyak yang tidak) maka tidak akan jelas apa yang terjadi. Ada saatnya Anda akan menyukai pendekatan yang kurang fungsional agar lebih mudah dibaca.Begitu banyak jawaban dan masih semua orang lupa tentang nama yang aneh, berperilaku aneh, namun masih berguna
dict.setdefault()
Ini
pada dasarnya lakukan ini:
misalnya
sumber
Jika Anda tidak bergabung dengan dua kamus, tetapi menambahkan pasangan nilai kunci baru ke kamus, maka menggunakan notasi subskrip sepertinya cara terbaik.
Namun, jika Anda ingin menambahkan, misalnya, ribuan pasangan nilai kunci baru, Anda harus mempertimbangkan untuk menggunakan
update()
metode ini.sumber
Saya pikir itu juga akan berguna untuk menunjukkan
collections
modul Python yang terdiri dari banyak subkelas kamus yang berguna dan pembungkus yang menyederhanakan penambahan dan modifikasi tipe data dalam kamus , khususnyadefaultdict
:Ini sangat berguna jika Anda bekerja dengan kamus yang selalu terdiri dari tipe atau struktur data yang sama, misalnya kamus daftar.
Jika kunci belum ada,
defaultdict
tetapkan nilai yang diberikan (dalam kasus kami10
) sebagai nilai awal ke kamus (sering digunakan di dalam loop). Oleh karena itu operasi ini melakukan dua hal: menambahkan kunci baru ke kamus (sesuai pertanyaan), dan memberikan nilai jika kunci belum ada. Dengan kamus standar, ini akan menimbulkan kesalahan karena+=
operasi mencoba mengakses nilai yang belum ada:Tanpa menggunakan
defaultdict
, jumlah kode untuk menambahkan elemen baru akan jauh lebih besar dan mungkin terlihat seperti:defaultdict
juga dapat digunakan dengan tipe data yang kompleks sepertilist
danset
:Menambahkan elemen secara otomatis menginisialisasi daftar.
sumber
Berikut cara lain yang tidak saya lihat di sini:
Anda dapat menggunakan kamus konstruktor dan perluasan implisit untuk merekonstruksi kamus. Selain itu, yang menarik, metode ini dapat digunakan untuk mengontrol urutan posisi selama konstruksi kamus ( post Python 3.6 ). Bahkan, pesanan penyisipan dijamin untuk Python 3.7 ke atas!
Di atas menggunakan pemahaman kamus.
sumber
pertama untuk memeriksa apakah kunci sudah ada
maka Anda dapat menambahkan kunci dan nilai baru
sumber
tambahkan kunci kamus, kelas nilai.
sumber