Giả sử tôi đã có hai dicts bằng Python:Có cách nào để đặt nhiều mặc định trên một dict Python sử dụng một dict?
mydict = { 'a': 0 }
defaults = {
'a': 5,
'b': 10,
'c': 15
}
Tôi muốn để có thể mở rộng mydict
sử dụng các giá trị mặc định từ defaults
, sao cho 'a' vẫn giữ nguyên nhưng 'b' và 'c' được điền vào. Tôi biết về dict.setdefault()
và dict.update()
, nhưng mỗi chỉ làm một nửa những gì tôi muốn - với dict.setdefault()
, tôi phải lặp qua từng biến trong defaults
; nhưng với dict.update()
, defaults
sẽ thổi bay mọi giá trị đã tồn tại trước đó trong mydict
.
Có một số chức năng mà tôi không tìm thấy được tích hợp trong Python có thể thực hiện được không? Và nếu không muốn nói, là có một cách Pythonic hơn về cách viết một vòng lặp để liên tục gọi dict.setdefaults()
hơn thế này:
for key in defaults.keys():
mydict.setdefault(key, defaults[key])
Bối cảnh: Tôi đang viết một số dữ liệu bằng Python điều khiển như thế nào để phân tích một cây XML. Có một dict cho mỗi nút (tức là, làm thế nào để xử lý mỗi nút), và tôi muốn dữ liệu tôi viết lên được thưa thớt, nhưng điền vào với mặc định. Mã ví dụ chỉ là một ví dụ ... mã thực có nhiều cặp khóa/giá trị hơn trong dict mặc định.
(Tôi nhận ra toàn bộ câu hỏi này chỉ là một phân minh nhỏ, nhưng nó được làm phiền tôi, vì vậy tôi đã tự hỏi nếu có một cách tốt hơn để làm điều này mà tôi không biết.)
Vâng, đây là những gì tôi thường làm quá .. – Macke
Tôi nghĩ về điều này, nhưng sẽ không sao chép toàn bộ mặc định là khá kém hiệu quả (đặc biệt là mydict có tất cả các giá trị thiết lập để bắt đầu với)? Bạn sẽ tạo ra một dict mới, sao chép tất cả các giá trị của một số khác, sau đó viết lại toàn bộ dict một lần nữa trong trường hợp đó. –
@Daniel Lew: các giá trị sẽ không được sao chép, chỉ cần tham chiếu đến chúng. Các dict mới sẽ có tài liệu tham khảo mới để các giá trị tương tự trong bộ nhớ. – nosklo