Làm thế nào để tạo một câu lệnh mặc định từ từ điển?


84

Nếu tôi có d=dict(zip(range(1,10),range(50,61)))làm thế nào tôi có thể xây dựng một collections.defaultdicttrong số dict?

Đối số duy nhất defaultdictdường như lấy là hàm nhà máy, tôi sẽ phải khởi tạo và sau đó chuyển qua bản gốc dvà cập nhật defaultdict?

Câu trả lời:


96

Đọc tài liệu :

Đối số đầu tiên cung cấp giá trị ban đầu cho thuộc tính default_factory; nó mặc định là Không. Tất cả các đối số còn lại được xử lý giống như khi chúng được chuyển cho hàm tạo dict , bao gồm cả các đối số từ khóa.

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

Hoặc cho một từ điển d:

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

3
Có thể mở rộng cách tiếp cận này cho các hệ số lồng nhau không? Sau đây không làm việc như dự định: default_dict = defaultdict(None,{"a":1,"b":{"c":3}})ví dụ default_dict["e"]đặt ra một KeyError thay vì trở về None
alancalvitti

4
@alancalvitti đó là bởi vì việc vượt qua Nonekhông có nghĩa là nó sẽ tạo ra Không cho các khóa không xác định, nó sẽ không sử dụng một khóa nào cả. Bạn cần phải làmdefaultdict(lambda: None, {....})
Eric Darchis

1

Bạn có thể tạo một lệnh mặc định từ dict, bằng cách chuyển dict làm đối số thứ hai.

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 )

0

defaultdict là một phương thức từ bộ sưu tập không trả về lỗi khóa khi phần tử không có mặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.