Bagaimana cara membuat defaultdict dari kamus?

Jika saya memiliki d=dict(zip(range(1,10),range(50,61))) bagaimana cara membuat collections.defaultdict dari dict?

Satu-satunya argumen yang tampaknya diambil defaultdict adalah fungsi pabrik, apakah saya harus menginisialisasi dan kemudian menelusuri d asli dan memperbarui defaultdict?


person Karthick    schedule 24.09.2011    source sumber


Jawaban (4)


Baca dokumen:

Argumen pertama memberikan nilai awal untuk atribut default_factory; defaultnya adalah Tidak Ada. Semua argumen yang tersisa diperlakukan sama seolah-olah argumen tersebut diteruskan ke konstruktor dict, termasuk argumen kata kunci.

from collections import defaultdict
d=defaultdict(int, zip(range(1,10),range(50,61)))

Atau diberi kamus d:

from collections import defaultdict
d=dict(zip(range(1,10),range(50,61)))
my_default_dict = defaultdict(int,d)
person Jochen Ritzel    schedule 24.09.2011
comment
Apakah mungkin untuk memperluas pendekatan ini untuk dicts yang bersarang? Berikut ini tidak berfungsi sebagaimana mestinya: default_dict = defaultdict(None,{"a":1,"b":{"c":3}}) misalnya default_dict["e"] memunculkan KeyError alih-alih mengembalikan Tidak Ada - person alancalvitti; 28.12.2018
comment
@alancalvitti itu karena meneruskan None tidak berarti akan menghasilkan Tidak Ada untuk kunci yang tidak diketahui, ia tidak akan menggunakan kunci sama sekali. Anda perlu melakukan defaultdict(lambda: None, {....}) - person Eric Darchis; 15.01.2019

Anda dapat membuat defaultdict dari dict, dengan meneruskan dict tersebut sebagai argumen kedua.

from collections import defaultdict

d1 = {'foo': 17}
d2 = defaultdict(int, d1)

print(d2['foo'])  ## should print 17
print(d2['bar'])  ## should print 1 (default int val )
person muhsin mohammed    schedule 24.08.2020
comment
Versi Python manakah yang Anda gunakan? Int val default untuk saya di Python 3.8.3 adalah 0, bukan 1. - person shmulvad; 05.01.2021

Anda dapat membuat defaultdict dengan kamus menggunakan callable.

from collections import defaultdict

def dict_():
    return {'foo': 1}

defaultdict_with_dict = defaultdict(dict_)
person hoi ja    schedule 16.03.2021

defaultdict adalah metode dari koleksi yang tidak mengembalikan kesalahan kunci ketika elemen tidak ada.

person Prem    schedule 24.10.2020
comment
Ini tidak menjawab pertanyaan sama sekali - person Ignatius; 26.01.2021