จะสร้าง defaultdict จากพจนานุกรมได้อย่างไร?

หากฉันมี d=dict(zip(range(1,10),range(50,61))) ฉันจะสร้าง collections.defaultdict จาก dict ได้อย่างไร

ดูเหมือนว่าอาร์กิวเมนต์เดียวที่ defaultdict จะใช้คือฟังก์ชันของโรงงาน ฉันจะต้องเริ่มต้นใช้งานแล้วดำเนินการตาม d ดั้งเดิมและอัปเดต defaultdict หรือไม่


person Karthick    schedule 24.09.2011    source แหล่งที่มา


คำตอบ (4)


อ่านเอกสาร:

อาร์กิวเมนต์แรกระบุค่าเริ่มต้นสำหรับแอตทริบิวต์ default_factory มันมีค่าเริ่มต้นเป็นไม่มี อาร์กิวเมนต์ที่เหลือทั้งหมดจะถือว่าเหมือนกับว่าถูกส่งผ่านไปยังตัวสร้าง dict รวมถึงอาร์กิวเมนต์ของคำหลักด้วย

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

หรือให้พจนานุกรม 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
เป็นไปได้ไหมที่จะขยายแนวทางนี้สำหรับ dicts ที่ซ้อนกัน? สิ่งต่อไปนี้ไม่ทำงานตามที่ตั้งใจ: default_dict = defaultdict(None,{"a":1,"b":{"c":3}}) เช่น default_dict["e"] ทำให้เกิด KeyError แทนที่จะส่งคืน None - person alancalvitti; 28.12.2018
comment
@alancalvitti นั่นเป็นเพราะการส่ง None ไม่ได้หมายความว่าจะสร้าง None สำหรับคีย์ที่ไม่รู้จัก แต่จะไม่ใช้เลย คุณต้องทำ defaultdict(lambda: None, {....}) - person Eric Darchis; 15.01.2019

คุณสามารถสร้าง defaultdict จาก dict โดยส่ง dict เป็นอาร์กิวเมนต์ที่สอง

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
คุณใช้ Python เวอร์ชันใดอยู่ int val เริ่มต้นสำหรับฉันใน Python 3.8.3 คือ 0 ไม่ใช่ 1 - person shmulvad; 05.01.2021

คุณสามารถสร้าง defaultdict ด้วยพจนานุกรมได้โดยใช้ callable

from collections import defaultdict

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

defaultdict_with_dict = defaultdict(dict_)
person hoi ja    schedule 16.03.2021

defaultdict เป็นวิธีการจากคอลเลกชันที่ไม่ส่งคืนข้อผิดพลาดของคีย์เมื่อไม่มีองค์ประกอบ

person Prem    schedule 24.10.2020
comment
นี่ไม่ได้ตอบคำถามเลย - person Ignatius; 26.01.2021