Như những người khác đã đề cập, a.update(b)đối với một số ý kiến avà bsẽ đạ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 extendphươ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), acác giá trị của KHÔNG nên được ghi đè bằng bcác giá trị. a.update(b)ghi đè lên acá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 defaultshoặ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ụ dictcho extend.