Saya punya kamus kosong. Nama: dict_x
Memiliki kunci yang nilainya daftar.
Dari iterasi yang terpisah, saya mendapatkan kunci (ex:) key_123
, dan item (tuple) untuk ditempatkan dalam daftar dict_x
nilai key_123
.
Jika kunci ini sudah ada, saya ingin menambahkan item ini. Jika kunci ini tidak ada, saya ingin membuatnya dengan daftar kosong dan kemudian menambahkannya atau hanya membuatnya dengan tuple di dalamnya.
Di masa depan ketika lagi kunci ini muncul, karena ada, saya ingin nilai ditambahkan lagi.
Kode saya terdiri dari ini:
Dapatkan kunci dan nilai.
Lihat apakah kunci NOT ada di
dict_x
.dan jika tidak membuatnya:
dict_x[key] == []
Setelah itu:
dict_x[key].append(value)
Apakah ini cara untuk melakukannya? Haruskah saya mencoba menggunakan try/except
blok?
dict_x[key] = [some_value] if not dict_x.has_key(key) else dict_x[key] + [some_value]
tetapi jawaban ini menyarankan cara yang jauh lebih baik. Bahkan itu didapatset()
sebagai argumen dan memungkinkan Anda untuk menggunakanadd()
metode ...Berikut adalah berbagai cara untuk melakukan ini sehingga Anda dapat membandingkan tampilannya dan memilih apa yang Anda suka. Saya telah memesannya dengan cara yang saya pikir paling "pythonic" , dan berkomentar pro dan kontra yang mungkin tidak jelas pada pandangan pertama:
Menggunakan
collections.defaultdict
:Pro: Mungkin kinerja terbaik. Cons: Tidak tersedia dalam Python 2.4.x.
Menggunakan
dict().setdefault()
:Cons: Penciptaan yang tidak efisien
list()
s.Menggunakan
try ... except
:Atau:
sumber
.setdefault()
membuat kamus yang tidak perlu. Saya pikir saya membuat yang tidak perlulist
(yaitu[]
) dalam argumen kedua.setdefault()
yang tidak pernah digunakan jikakey
sudah ada. Saya bisa menggunakandict.setdefault()
(untuk kepentingan hashing kunci yang efisien), dan menggunakan variabel untuk menggunakan kembali yang tidak digunakanlist
tetapi itu menambahkan beberapa baris kode lagi..setdefault
menciptakan biasa didict
mana absen kunci pencarian akan menghasilkan beberapaKeyError
saatcollections.defaultdict(list)
menciptakan menciptakan didict
mana absen kunci pencarian akan memasukkan kosonglist
- saya pikir Anda harus memilih berdasarkan perilaku yang Anda inginkanAnda dapat menggunakan defaultdict untuk ini.
Ini sedikit lebih efisien daripada
setdefault
karena Anda tidak membuat daftar baru yang akhirnya tidak Anda gunakan. Setiap panggilan kesetdefault
akan membuat daftar baru, bahkan jika item sudah ada di kamus.sumber
Anda dapat menggunakan defaultdict di
collections
.Contoh dari doc:
sumber
sumber
dict.get
).