2009-08-05 45 views
6

Tôi có ba danh sách, đầu tiên là danh sách các tên, danh sách thứ hai là danh sách các từ điển và danh sách thứ ba là danh sách dữ liệu. Mỗi vị trí trong danh sách tương ứng với cùng vị trí trong các danh sách khác. List_1 [0] có dữ liệu tương ứng trong List_2 [0] và List_3 [0], v.v. Tôi muốn chuyển ba danh sách này thành một từ điển bên trong từ điển, với các giá trị trong List_1 là các khóa chính. Làm cách nào để làm điều này trong khi vẫn giữ mọi thứ theo thứ tự?Từ điển ghép nối

Trả lời

13
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> dict(zip(a, zip(b, c))) 
{1: (4, 7), 2: (5, 8), 3: (6, 9)} 

Xem documentation để biết thêm thông tin về zip.

Như lionbest chỉ ra dưới đây, bạn có thể muốn xem itertools.izip() nếu dữ liệu đầu vào của bạn lớn. izip thực chất giống như zip, nhưng nó tạo ra các trình lặp thay vì danh sách. Bằng cách này, bạn không tạo danh sách tạm thời lớn trước khi tạo từ điển.

+5

Nếu a, b, c sẽ rất lớn, tôi khuyên bạn nên dùng izip từ mô-đun itertools. – Arpegius

+0

@lionbest: Tốt, tôi đã thêm điều đó. – balpha

1

Python 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)} 

Python 2.5:

combined = {} 
for i, name in enumerate(List_1): 
    combined[name] = dict(data1=List_2[i], data2=List_3[i]) 
0

nếu thứ tự của những điều này vấn đề, bạn không nên sử dụng một từ điển. theo định nghĩa, chúng không có thứ tự. bạn có thể sử dụng một trong số many ordered_dictionary implementations thả nổi xung quanh hoặc đợi python 2.7 hoặc 3.1 sẽ bao gồm việc triển khai từ điển theo thứ tự trong mô-đun bộ sưu tập.