Hướng dẫn how do i concatenate a list of dictionaries in python? - làm cách nào để nối danh sách các từ điển trong python?

215

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Làm thế nào tôi có thể biến một danh sách các dicts như

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
6, thành một dict duy nhất như
# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
7?

Câu trả lời ở đây sẽ ghi đè lên các khóa phù hợp giữa hai trong số các dicts đầu vào, bởi vì một dict không thể có các khóa trùng lặp. Nếu bạn muốn thu thập nhiều giá trị từ các khóa phù hợp, hãy xem làm thế nào để hợp nhất các dicts, thu thập các giá trị từ các khóa phù hợp ?.

Hỏi ngày 16 tháng 8 năm 2010 lúc 15:55Aug 16, 2010 at 15:55

5

Điều này hoạt động cho từ điển có độ dài bất kỳ:

>>> result = {}
>>> for d in L:
...    result.update[d]
... 
>>> result
{'a':1,'c':1,'b':2,'d':2}

Như một sự hiểu biết:

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]

wim

313K95 Huy hiệu vàng570 Huy hiệu bạc709 Huy hiệu đồng95 gold badges570 silver badges709 bronze badges

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 16:56Aug 16, 2010 at 16:56

0

Trong trường hợp Python 3.3+, có một bộ sưu tập

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
8:

>>> from collections import ChainMap
>>> a = [{'a':1},{'b':2},{'c':1},{'d':2}]
>>> dict[ChainMap[*a]]
{'b': 2, 'c': 1, 'a': 1, 'd': 2}

Cũng thấy:

  • Mục đích của bộ sưu tập.chainmap là gì?

Đã trả lời ngày 13 tháng 1 năm 2016 lúc 5:50Jan 13, 2016 at 5:50

Alecxealecxealecxe

449K114 Huy hiệu vàng1043 Huy hiệu bạc1167 Huy hiệu đồng114 gold badges1043 silver badges1167 bronze badges

1

Một chút cải thiện cho @DietBuddha Trả lời với từ điển giải nén từ PEP 448, đối với tôi, nó cũng dễ đọc hơn theo cách này, nó cũng nhanh hơn:

from functools import reduce
result_dict = reduce[lambda a, b: {**a, **b}, list_of_dicts]

Nhưng hãy nhớ rằng, điều này chỉ hoạt động với các phiên bản Python 3,5+.

Đã trả lời ngày 9 tháng 2 năm 2020 lúc 17:09Feb 9, 2020 at 17:09

1

Điều này tương tự như @delnan nhưng cung cấp tùy chọn để sửa đổi các mục K/V [khóa/giá trị] và tôi tin rằng dễ đọc hơn:

new_dict = {k:v for list_item in list_of_dicts for [k,v] in list_item.items[]}

Chẳng hạn, thay thế K/V ELEM như sau:

new_dict = {str[k].replace[" ","_"]:v for list_item in list_of_dicts for [k,v] in list_item.items[]}

Giải nén K, V Tuple từ Dictionary .Items [] Trình tạo sau khi rút đối tượng Dict ra khỏi danh sách

Đã trả lời ngày 4 tháng 5 năm 2018 lúc 16:29May 4, 2018 at 16:29

SchaltonschaltonSchalton

2.5732 Huy hiệu vàng30 Huy hiệu bạc41 Huy hiệu Đồng2 gold badges30 silver badges41 bronze badges

Đối với từ điển phẳng, bạn có thể làm điều này:

from functools import reduce
reduce[lambda a, b: dict[a, **b], list_of_dicts]

Siha

7.17212 Huy hiệu vàng32 Huy hiệu bạc42 Huy hiệu đồng12 gold badges32 silver badges42 bronze badges

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 22:36Apr 16, 2013 at 22:36

Dietbuddhadietbuddhadietbuddha

8.26829 Huy hiệu bạc33 Huy hiệu đồng29 silver badges33 bronze badges

>>> L=[{'a': 1}, {'b': 2}, {'c': 1}, {'d': 2}]    
>>> dict[i.items[][0] for i in L]
{'a': 1, 'c': 1, 'b': 2, 'd': 2}

Lưu ý: thứ tự của 'B' và 'C' không khớp với đầu ra của bạn vì các dicts không được đặt hàng

Nếu các dicts có thể có nhiều hơn một khóa/giá trị

>>> dict[j for i in L for j in i.items[]]

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 16:38Aug 16, 2010 at 16:38

John La Rooyjohn La RooyJohn La Rooy

286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng51 gold badges359 silver badges499 bronze badges

3

Bạn có thể sử dụng chức năng tham gia từ Thư viện Funcy:

from funcy import join
join[list_of_dicts]

Đã trả lời ngày 4 tháng 6 năm 2014 lúc 21:05Jun 4, 2014 at 21:05

SuasuorSuor

2.6721 Huy hiệu vàng20 Huy hiệu bạc28 Huy hiệu đồng1 gold badge20 silver badges28 bronze badges

1

Nếu bạn không cần Singleton dicts nữa:

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
0

Đã trả lời ngày 2 tháng 10 năm 2021 lúc 12:41Oct 2, 2021 at 12:41

Không có bình luận nàono comment

6.1854 Huy hiệu vàng10 Huy hiệu bạc 30 Huy hiệu Đồng4 gold badges10 silver badges30 bronze badges

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
1

Điều này là không đối xứng bởi vì bạn cần chọn những việc cần làm với các phím trùng lặp; Trong trường hợp này,

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
9 sẽ ghi đè lên
>>> from collections import ChainMap
>>> a = [{'a':1},{'b':2},{'c':1},{'d':2}]
>>> dict[ChainMap[*a]]
{'b': 2, 'c': 1, 'a': 1, 'd': 2}
0. Trao đổi chúng theo cách khác.

Chỉnh sửa: Ah, xin lỗi, không thấy điều đó.

Có thể làm điều này trong một biểu thức duy nhất:

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
2

Không có tín dụng cho tôi cho điều này cuối cùng!

Tuy nhiên, tôi cho rằng nó có thể là Pythonic [rõ ràng> ẩn, phẳng> lồng nhau] để làm điều này với một vòng lặp

>>> from collections import ChainMap
>>> a = [{'a':1},{'b':2},{'c':1},{'d':2}]
>>> dict[ChainMap[*a]]
{'b': 2, 'c': 1, 'a': 1, 'd': 2}
1 đơn giản. Ymmv.

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 15:58Aug 16, 2010 at 15:58

KatrielkatrielKatriel

117K19 Huy hiệu vàng133 Huy hiệu bạc165 Huy hiệu Đồng19 gold badges133 silver badges165 bronze badges

1

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
3

Lưu ý Tôi đã thêm một cặp khóa/giá trị thứ hai vào từ điển cuối cùng để hiển thị nó hoạt động với nhiều mục. Ngoài ra, các khóa từ dicts sau này trong danh sách sẽ ghi đè cùng một khóa từ một dict trước đó.

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 16:59Aug 16, 2010 at 16:59

Dave Kirbydave KirbyDave Kirby

25K5 Huy hiệu vàng64 Huy hiệu bạc82 Huy hiệu Đồng5 gold badges64 silver badges82 bronze badges

Cách này làm việc cho tôi:

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
4

Đối tượng in:

# Python >= 2.7
{k: v for d in L for k, v in d.items[]}

# Python < 2.7
dict[pair for d in L for pair in d.items[]]
5

Cảm ơn Axes

Đã trả lời ngày 26 tháng 9 lúc 13:14Sep 26 at 13:14

Làm thế nào để bạn kết hợp nhiều từ điển trong Python?

Python 3.9 đã giới thiệu toán tử hợp nhất [|] trong lớp Dict.Sử dụng toán tử hợp nhất, chúng ta có thể kết hợp từ điển trong một dòng mã duy nhất.Chúng ta cũng có thể hợp nhất các từ điển tại chỗ bằng cách sử dụng toán tử cập nhật [| =].merge operator [|] in the dict class. Using the merge operator, we can combine dictionaries in a single line of code. We can also merge the dictionaries in-place by using the update operator [|=].

Làm cách nào để nối một danh sách các từ điển trong Python?

Để nối một từ điển vào danh sách: Sử dụng phương thức Copy [] để tạo một bản sao nông của từ điển. Sử dụng phương thức list.Append [] để nối bản sao vào danh sách.Use the copy[] method to create a shallow copy of the dictionary. Use the list. append[] method to append the copy to the list.

Làm cách nào để thêm nhiều từ điển vào danh sách?

Cũng có thể hợp nhất nhiều từ điển ...
Thêm/Cập nhật một mục vào/trong từ điển bằng cách chỉ định khóa ..
Hợp nhất nhiều từ điển: update [], {}, dict [], |, | =.
Thêm/cập nhật nhiều mục vào/trong từ điển: Update [], | =.

Chúng ta có thể nối từ điển trong Python không?

Trong bản cập nhật mới nhất của Python, chúng ta có thể sử dụngNhà điều hành để hợp nhất hai từ điển.Đó là một phương pháp rất thuận tiện để hợp nhất từ điển.we can use “|” operator to merge two dictionaries. It is a very convenient method to merge dictionaries.

Bài Viết Liên Quan

Chủ Đề