Tôi có một dict python lớn được tạo từ dữ liệu json và đang tạo một dict nhỏ hơn từ một lớn. Một số yếu tố của từ điển lớn có một khóa gọi là 'chi tiết' và một số yếu tố thì không. Những gì tôi muốn làm là kiểm tra xem khóa có tồn tại trong mỗi mục nhập trong từ điển lớn hay không, thêm phím 'chi tiết' với giá trị 'Không có chi tiết nào có sẵn' vào từ điển mới. Tôi đang đặt một số mã mẫu dưới đây như một minh chứng. LargeDict lớn hơn nhiều với nhiều khóa trong mã của tôi, nhưng tôi giữ nó đơn giản để rõ ràng.Kiểm tra xem khóa có tồn tại trong từ điển hay không. Nếu không, hãy thêm nó
LargeDict = {'results':
[{'name':'john','age':'23','datestart':'12/07/08','department':'Finance','details':'Good Employee'},
{'name':'barry','age':'26','datestart':'25/08/10','department':'HR','details':'Also does payroll'},
{'name':'sarah','age':'32','datestart':'13/05/05','department':'Sales','details':'Due for promotion'},
{'name':'lisa','age':'21','datestart':'02/05/12','department':'Finance'}]}
Đây là cách tôi đang nhận dữ liệu cho SmallDict:
SmallDict = {d['name']:{'department':d['department'],'details':d['details']} for d in LargeDict['results']}
tôi nhận được một lỗi quan trọng tuy nhiên khi một trong những mục dict lớn không có chi tiết. Tôi có đúng khi nói rằng tôi cần sử dụng mô-đun DefaultDict
hoặc có cách nào dễ dàng hơn không?
+1 (Từ các tài liệu) dict.setdefault(): "Nếu khóa có trong từ điển, trở về giá trị của nó Nếu không, chèn chủ chốt với giá trị mặc định và trở lại. mặc định. mặc định là Không. " – heltonbiker
Có. Dùng cái này. defaultdict là một sinh vật tà ác cho người không tự nguyện. – javadba
FWIW, tôi nghĩ 'defaultdict' rất tuyệt. Chủ yếu, tôi không nghĩ rằng nó có giá trị chuyển đổi một 'dict' thường xuyên thành' defaultdict' nếu bạn đã nhận nó từ một nguồn khác. Các "tệ nạn" của 'defaultdict' có thể được phá vỡ chỉ đơn giản bằng cách thiết lập thuộc tính' default_factory' thành 'None' (nó sẽ làm cho nó hoạt động giống như một dict thông thường một lần nữa). – mgilson