Tôi có hai từ điển hiện có và tôi muốn 'nối' một trong số chúng vào cái kia. Tôi có nghĩa là chìa khóa, các giá trị của từ điển khác nên được thực hiện vào từ điển đầu tiên. Ví dụ:
orig = {
'A': 1,
'B': 2,
'C': 3,
}
extra = {
'D': 4,
'E': 5,
}
dest = # Something here involving orig and extra
print dest
{
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5
}
Tôi nghĩ rằng tất cả điều này có thể đạt được thông qua một vòng lặp
orig.update[extra]
3 [có thể?], Nhưng có một số phương pháp từ điển hoặc bất kỳ mô -đun nào khác tiết kiệm công việc này cho tôi? Các từ điển thực tế tôi đang sử dụng thực sự rất lớn ...
hỏi ngày 19 tháng 1 năm 2012 lúc 17:55Jan 19, 2012 at 17:55
Javier Novoa C.Javier Novoa C.Javier Novoa C.
10,5K13 Huy hiệu vàng51 Huy hiệu bạc75 Huy hiệu Đồng13 gold badges51 silver badges75 bronze badges
1
Bạn có thể làm
orig.update[extra]
Hoặc, nếu bạn không muốn
orig.update[extra]
4 được sửa đổi, hãy tạo một bản sao trước:dest = dict[orig] # or orig.copy[]
dest.update[extra]
Lưu ý rằng nếu thêm và orig có các khóa chồng chéo, giá trị cuối cùng sẽ được lấy từ thêm. Ví dụ,
>>> d1 = {1: 1, 2: 2}
>>> d2 = {2: 'ha!', 3: 3}
>>> d1.update[d2]
>>> d1
{1: 1, 2: 'ha!', 3: 3}
Đã trả lời ngày 19 tháng 1 năm 2012 lúc 17:58Jan 19, 2012 at 17:58
8
Có hai cách để thêm một từ điển vào một từ khác:
Cập nhật [sửa đổi
4 tại chỗ] [modifies orig.update[extra]
orig.update[extra]
4 in place]orig.update[extra] # Python 2.7+
orig |= extra # Python 3.9+
Hợp nhất [tạo ra một từ điển mới] [creates a new dictionary]
# Python 2.7+
dest = collections.ChainMap[orig, extra]
dest = {k: v for d in [orig, extra] for [k, v] in d.items[]}
# Python 3
dest = {**orig, **extra}
dest = {**orig, 'D': 4, 'E': 5}
# Python 3.9+
dest = orig | extra
Hãy cẩn thận
Lưu ý rằng các hoạt động này là không hoạt động. Trong mọi trường hợp, sau này là người chiến thắng. Ví dụ.
orig = {'A': 1, 'B': 2} extra = {'A': 3, 'C': 3} dest = orig | extra # dest = {'A': 3, 'B': 2, 'C': 3} dest = extra | orig # dest = {'A': 1, 'B': 2, 'C': 3}
Cũng cần lưu ý rằng chỉ từ Python 3.7 [và CPython 3.6]
6 được đặt hàng. Vì vậy, trong các phiên bản trước, thứ tự của các mục trong từ điển có thể khác nhau.orig.update[extra]
Đã trả lời ngày 4 tháng 7 năm 2016 lúc 2:13Jul 4, 2016 at 2:13
Nuno Andrénuno AndréNuno André
3.9701 Huy hiệu vàng29 Huy hiệu bạc42 Huy hiệu đồng1 gold badge29 silver badges42 bronze badges
2
orig.update[extra]
7 Có vẻ như nó sẽ làm những gì bạn muốn ...>> orig.update[extra]
>>> orig
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
>>>
Mặc dù vậy, có lẽ, bạn không muốn cập nhật từ điển ban đầu của mình, nhưng làm việc trên một bản sao:
>>> dest = orig.copy[]
>>> dest.update[extra]
>>> orig
{'A': 1, 'C': 3, 'B': 2}
>>> dest
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
Đã trả lời ngày 19 tháng 1 năm 2012 lúc 17:58Jan 19, 2012 at 17:58
Có hai cách để thêm một từ điển vào một từ khác:johnsyweb
Cập nhật [sửa đổi
4 tại chỗ]23 gold badges180 silver badges244 bronze badgesorig.update[extra]
Hợp nhất [tạo ra một từ điển mới]
from itertools import chain
dest = dict[chain[orig.items[], extra.items[]]]
Hãy cẩn thận
orig.update[extra]
0Lưu ý rằng các hoạt động này là không hoạt động. Trong mọi trường hợp, sau này là người chiến thắng. Ví dụ.
Cũng cần lưu ý rằng chỉ từ Python 3.7 [và CPython 3.6]
orig.update[extra]
6 được đặt hàng. Vì vậy, trong các phiên bản trước, thứ tự của các mục trong từ điển có thể khác nhau.orig.update[extra]
1Đã trả lời ngày 4 tháng 7 năm 2016 lúc 2:13Jan 19, 2012 at 18:13
Nuno Andrénuno AndréAndrew Clark
3.9701 Huy hiệu vàng29 Huy hiệu bạc42 Huy hiệu đồng33 gold badges268 silver badges298 bronze badges
1
orig.update[extra]
7 Có vẻ như nó sẽ làm những gì bạn muốn ...orig.update[extra]
2Mặc dù vậy, có lẽ, bạn không muốn cập nhật từ điển ban đầu của mình, nhưng làm việc trên một bản sao:
Johnsywebjohnsyweb
Huy hiệu vàng 133K23May 18, 2017 at 5:30
Giả sử rằng bạn không muốn thay đổi
orig.update[extra]
4, bạn có thể thực hiện một bản sao và cập nhật như các câu trả lời khác hoặc bạn có thể tạo một từ điển mới trong một bước bằng cách chuyển tất cả các mục từ cả hai từ điển vào trình xây dựng Dict:jkdevHoặc không có itertools:15 gold badges55 silver badges77 bronze badges
1
Lưu ý rằng bạn chỉ cần chuyển kết quả của
orig.update[extra]
9 vào dest = dict[orig] # or orig.copy[]
dest.update[extra]
0 trên Python 3, trên 2.x dest = dict[orig] # or orig.copy[]
dest.update[extra]
1 đã trả lại một danh sách để bạn có thể làm dest = dict[orig] # or orig.copy[]
dest.update[extra]
2.Như một trường hợp sử dụng tổng quát hơn, giả sử bạn có một danh sách các dicts lớn hơn mà bạn muốn kết hợp thành một dict duy nhất, bạn có thể làm điều gì đó như thế này: Update the dictionary with the key/value pairs from other, overwriting existing keys. Return None.
Đã trả lời ngày 19 tháng 1 năm 2012 lúc 18:13
Andrew Clarkandrew Clark
196K33 Huy hiệu vàng268 Huy hiệu bạc298 Huy hiệu Đồng
Một lớp ba để kết hợp hoặc hợp nhất hai từ điển:69 gold badges491 silver badges638 bronze badges
Đã trả lời ngày 19 tháng 1 năm 2012 lúc 17:58Jan 19, 2012 at 17:58
Có hai cách để thêm một từ điển vào một từ khác:sleeplessnerd
Cập nhật [sửa đổi
4 tại chỗ]1 gold badge24 silver badges29 bronze badgesorig.update[extra]