Làm thế nào để chuyển đổi danh sách của dict cho dict. Dưới đây là danh sách các dict
data = [{'name': 'John Doe', 'age': 37, 'sex': 'M'},
{'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
{'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}]
đến
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
Đã hỏi ngày 8 tháng 3 năm 2011 lúc 17:51Mar 8, 2011 at 17:51
4
Một giải pháp khả thi sử dụng tên làm khóa mới:
new_dict = {}
for item in data:
name = item['name']
new_dict[name] = item
Với Python 3.x, bạn cũng có thể sử dụng các trình độ toàn diện cho cùng một cách tiếp cận theo cách tốt hơn:
new_dict = {item['name']:item for item in data}
Như đã đề xuất trong một bình luận của Paul McGuire, nếu bạn không muốn cái tên trong Dict bên trong, bạn có thể làm:
new_dict = {}
for item in data:
name = item.pop['name']
new_dict[name] = item
Đã trả lời ngày 8 tháng 3 năm 2011 lúc 17:58Mar 8, 2011 at 17:58
Joaquinjoaquinjoaquin
80.2k28 Huy hiệu vàng137 Huy hiệu bạc151 Huy hiệu đồng28 gold badges137 silver badges151 bronze badges
6
Với
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
5 data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
6 trở lên, bạn có thể sử dụng ChainmapMột nhóm Chainmap nhiều bản đồ hoặc ánh xạ khác lại với nhau để tạo một chế độ xem duy nhất, có thể cập nhật. Nếu không có bản đồ nào được chỉ định, một từ điển trống duy nhất được cung cấp để một chuỗi mới luôn có ít nhất một ánh xạ.
from collections import ChainMap
data = dict[ChainMap[*data]]
Amiabl
96417 Huy hiệu bạc26 Huy hiệu đồng17 silver badges26 bronze badges
Đã trả lời ngày 26 tháng 6 năm 2018 lúc 16:47Jun 26, 2018 at 16:47
Vlad Bezdenvlad BezdenVlad Bezden
77.8K23 Huy hiệu vàng245 Huy hiệu bạc177 Huy hiệu đồng23 gold badges245 silver badges177 bronze badges
4
Nếu các dicts sẽ không chia sẻ khóa, thì bạn có thể sử dụng:
dict[[key,d[key]] for d in data for key in d]
Có lẽ tốt hơn trong trường hợp của bạn để tạo ra một dict với danh sách là giá trị?
newdict={}
for k,v in [[key,d[key]] for d in data for key in d]:
if k not in newdict: newdict[k]=[v]
else: newdict[k].append[v]
Sản lượng này:
>>> newdict
`{'age': [37, 17, 57], 'name': ['John Doe', 'Lisa Simpson', 'Bill Clinton'], 'sex': ['M', 'F', 'M']}`
TẠI
12.4K19 Huy hiệu vàng91 Huy hiệu bạc154 Huy hiệu đồng19 gold badges91 silver badges154 bronze badges
Đã trả lời ngày 8 tháng 3 năm 2011 lúc 18:10Mar 8, 2011 at 18:10
Phynfophynfophynfo
4.7201 Huy hiệu vàng23 Huy hiệu bạc38 Huy hiệu đồng1 gold badge23 silver badges38 bronze badges
Hãy thử phương pháp này:
dict[[key, val] for k in data for key, val in k.items[]]
chỉ nha khoa
2.2921 Huy hiệu vàng17 Huy hiệu bạc34 Huy hiệu đồng1 gold badge17 silver badges34 bronze badges
Đã trả lời ngày 18 tháng 9 năm 2018 lúc 8:13Sep 18, 2018 at 8:13
AnkankANK
4997 Huy hiệu bạc11 Huy hiệu đồng7 silver badges11 bronze badges
Đừng làm phức tạp quá mức này:
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
0
Paul Roub
36.1K27 Huy hiệu vàng81 Huy hiệu bạc89 Huy hiệu đồng27 gold badges81 silver badges89 bronze badges
Đã trả lời ngày 27 tháng 7 năm 2020 lúc 14:36Jul 27, 2020 at 14:36
MrfrostymrfrostyMrFrosty
1021 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges
1
Có lẽ bạn muốn tên là chìa khóa? Bạn không thực sự chỉ định, vì ví dụ thứ hai của bạn không hợp lệ và không thực sự có ý nghĩa.
Lưu ý rằng ví dụ của tôi loại bỏ "tên" khóa khỏi giá trị, có thể mong muốn [hoặc có lẽ không].
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
1
Đã trả lời ngày 8 tháng 3 năm 2011 lúc 18:05Mar 8, 2011 at 18:05
Chmulligchmulligchmullig
12.9k5 Huy hiệu vàng34 Huy hiệu bạc52 Huy hiệu Đồng5 gold badges34 silver badges52 bronze badges
1
5 xu của tôi, không thích bất kỳ câu trả lời nào:
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
2Đã trả lời ngày 18 tháng 2 lúc 15:25Feb 18 at 15:25
McStarionimcstarionimcstarioni
Huy hiệu bằng đồng 3131 Bạc131 silver badge13 bronze badges
Chỉ trong trường hợp bạn muốn một sự thay thế chức năng [cũng giả sử các tên được muốn là khóa mới], bạn có thể làm
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
3Đã trả lời ngày 14 tháng 11 năm 2019 lúc 18:15Nov 14, 2019 at 18:15
data = {'John Doe': {'name': 'John Doe', 'age': 37, 'sex': 'M'},
'Lisa Simpson': {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
'Bill Clinton': {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
4Đã trả lời ngày 22 tháng 12 năm 2021 lúc 10:16Dec 22, 2021 at 10:16
Kumar Skumar sKumar S
3894 Huy hiệu bạc9 Huy hiệu Đồng4 silver badges9 bronze badges