2012-05-15 27 views
11

Hãy nói rằng tôi có danh sách sau đây của từ điển python:Cập nhật một danh sách các từ điển python với một chìa khóa, cặp giá trị từ một danh sách khác

dict1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 

và một danh sách như:

list1 = [3, 6] 

tôi d muốn cập nhật dict1 hoặc tạo danh sách khác như sau:

dict1 = [{'domain':'Ratios', 'count':3}, {'domain':'Geometry', 'count':6}] 

Tôi làm như thế nào?

+0

Theo ví dụ, tiêu đề cho câu hỏi này phải là: "Cập nhật danh sách các giá trị từ điển python từ danh sách khác". Từ tiêu đề hiện tại tôi mong đợi rằng list1 = [('Tỷ lệ', 3), ('Hình học', 6)] – yucer

Trả lời

21
>>> l1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 
>>> l2 = [3, 6] 
>>> for d,num in zip(l1,l2): 
     d['count'] = num 


>>> l1 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 

Một cách khác để làm việc đó, lần này với một sự hiểu biết danh sách mà không biến những gốc:

>>> [dict(d, count=n) for d, n in zip(l1, l2)] 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 
+0

Cảm ơn. Các giải pháp thứ hai mang lại một lỗi ở dạng hiện tại của nó –

+0

Bạn đang sử dụng python 3? Tôi có thể sẽ thay đổi nó để tương thích chéo. – jamylak

+0

Nó bây giờ hoạt động trong Python 3 là tốt nếu đó là vấn đề của bạn :) – jamylak

5

Bạn có thể làm điều này:

for i, d in enumerate(dict1): 
    d['count'] = list1[i] 
2

Bạn có thể làm điều này:

# list index 
l_index=0 

# iterate over all dictionary objects in dict1 list 
for d in dict1: 

    # add a field "count" to each dictionary object with 
    # the appropriate value from the list 
    d["count"]=list1[l_index] 

    # increase list index by one 
    l_index+=1 

Giải pháp này không tạo danh sách mới. Thay vào đó, nó cập nhật danh sách dict1 hiện có.

+0

Rất tiết cho Python nhưng giải thích tất cả mọi thứ thực sự tốt. – jamylak

+1

Có bạn có quyền! Nó rất dài dòng. Nhưng kể từ khi có câu trả lời khác ít tiết ở đây, tôi nghĩ rằng nó sẽ là ok để thêm một giải pháp giải thích hơn .. –

+0

Cảm ơn bạn đã giải thích chi tiết. –

0

Sử dụng tính năng hiểu danh sách sẽ là cách thức quan trọng để thực hiện điều đó.

[data.update({'count': list1[index]}) for index, data in enumerate(dict1)] 

dict1 sẽ được cập nhật với giá trị tương ứng từ list1.

+1

-1 Sử dụng một danh sách hiểu cho các đột biến là ** không ** pythonic. Sử dụng vòng lặp đơn giản. – jamylak

+0

cập nhật trên một công việc dict về tham chiếu không cung cấp đầu ra. data.update() trả về None. Bạn sẽ nhận ra là [Không, Không, ....] –

Các vấn đề liên quan