Như những người khác đã đề cập, a.update(b)
đối với một số ý kiến a
và b
sẽ đạt được kết quả mà bạn đã yêu cầu trong câu hỏi của mình. Tuy nhiên, tôi muốn chỉ ra rằng nhiều lần tôi đã thấy extend
phương pháp ánh xạ / thiết lập các đối tượng mong muốn rằng trong cú pháp a.extend(b)
, a
các giá trị của KHÔNG nên được ghi đè bằng b
các giá trị. a.update(b)
ghi đè lên a
các giá trị của nó, và do đó không phải là một lựa chọn tốt cho extend
.
Lưu ý rằng một số ngôn ngữ gọi phương thức này defaults
hoặc inject
, vì nó có thể được coi là một cách để tiêm các giá trị b (có thể là một tập hợp các giá trị mặc định) vào từ điển mà không ghi đè các giá trị có thể tồn tại.
Tất nhiên, bạn có thể lưu ý đơn giản a.extend(b)
gần giống như b.update(a); a=b
. Để xóa bài tập, bạn có thể làm như vậy:
def extend(a,b):
"""Create a new dictionary with a's properties extended by b,
without overwriting.
>>> extend({'a':1,'b':2},{'b':3,'c':4})
{'a': 1, 'c': 4, 'b': 2}
"""
return dict(b,**a)
Cảm ơn Tom Leys vì ý tưởng thông minh đó bằng cách sử dụng hàm tạo không có tác dụng phụ dict
cho extend
.