Danh sách các bộ vào từ điển


111

Đây là cách tôi hiện đang chuyển đổi danh sách các bộ giá trị sang từ điển bằng Python:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

Có cách nào tốt hơn? Có vẻ như cần phải có một lớp lót để làm điều này.

Câu trả lời:


177

Chỉ cần gọi dict()trực tiếp vào danh sách các bộ giá trị

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp, tôi biết sẽ có một cách đơn giản để làm điều đó ... Đến từ Ruby ở đây, cố gắng học cách hoạt động của Python. Cảm ơn!
Sarah Vessels

5
@chandresh Điều này hoạt động trong Python 3, vì vậy không cần cập nhật.
Sven Marnach

@SvenMarnach, Đây là kết quả của tôi về cùng một lệnh mà bạn đã viết ở trên trên thiết bị đầu cuối py 3.5. Truy xuất nguồn gốc (lần gọi gần đây nhất): Tệp "<ipython-input-313-7bb3559567ff>", dòng 1, trong <module> dict (my_list) TypeError: Đối tượng 'Dictionary' không thể gọi được
CKM

4
@chandresh Điều này không liên quan gì đến Python 3 - đó là vì bạn có một biến được gọi dict, che khuất phiên bản Python được tích hợp sẵn cùng tên. Bạn không bao giờ nên làm điều đó.
Sven Marnach

@SvenMarnach Ôi. Cảm ơn. Nó đã làm việc. Trên thực tế, tôi nhận được một số mã từ web và cố gắng chạy nó. Có vẻ như tác giả đã sử dụng dictlàm tên biến từ nơi tôi nhận được lỗi. Cảm ơn một lần nữa.
CKM

23

Hàm dicttạo chấp nhận đầu vào chính xác như bạn có (bộ giá trị / khóa).

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

Từ tài liệu :

Ví dụ: tất cả chúng đều trả về một từ điển bằng {"một": 1, "hai": 2}:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

Với sự dicthiểu biết:

h = {k:v for k,v in l}

4
đẹp bởi vì nó cho phép bạn làm định dạng trên phím / giá trị trước khi thêm nó vào dict
jfunk

7

Có vẻ như mọi người ở đây đều giả định rằng danh sách các bộ giá trị có ánh xạ 1-1 giữa khóa và giá trị (ví dụ: nó không có các khóa trùng lặp cho từ điển). Vì đây là câu hỏi đầu tiên khi tìm kiếm về chủ đề này, tôi đăng câu trả lời cho một trường hợp chung hơn mà chúng ta phải giải quyết các bản sao:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.