2012-04-04 42 views
5

Tôi đang cố tạo quy trình python tự động sử dụng hai danh sách riêng biệt để tạo từ điển và cho đến nay tôi không thành công. Tôi có hai danh sách được sắp xếp trong đó mục thứ n trong danh sách nắm tay tương ứng với mục thứ n trong danh sách thứ hai và tôi muốn kết hợp chúng thành một từ điển.Thủ tục Python để điền từ điển từ dữ liệu trong 2 danh sách riêng biệt

Ví dụ: một tập hợp con của 2 danh sách như sau;

name = ['Adam', 'Alfred', 'Amy', 'Andy', 'Bob'] 
year = [1972, 1968, 1985, 1991, 1989] 

tôi muốn đầu ra của tôi là:

birth_years = {'Adam':1972, 'Alfred':1968, 'Amy':1985, 'Andy':1991, 'Bob':1989} 

Tôi đã cố gắng để làm điều này với một vòng lặp for, nhưng tôi không thể làm cho nó làm việc. Tôi đánh giá cao sự giúp đỡ nào.

+1

là bài tập về nhà này? Nếu không, hãy suy nghĩ lại những gì đang xảy ra ở thượng nguồn; việc dữ liệu của bạn được cấu trúc trong danh sách song song không phải là một ý tưởng hay và không xảy ra một cách tự nhiên. Ví dụ, những thứ như vậy đến một cách tự nhiên trong cùng một dòng của một tệp dữ liệu hoặc cùng một hàng của một bảng hoặc bảng tính cơ sở dữ liệu và bạn có thể thêm chúng vào một 'dict' khi bạn đọc đầu vào. –

Trả lời

14

Sử dụng các chức năng zipdict để xây dựng một từ điển ra khỏi một danh sách các hàng:

birth_years = dict(zip(name, year)) 

Và nếu bạn tò mò, đây sẽ là làm thế nào tôi sẽ cố gắng để làm điều đó với một vòng lặp for:

birth_years = {} 

for index, n in enumerate(name): 
    birth_years[n] = years[index] 

Tôi nghĩ tôi thích ví dụ đầu tiên hơn.

+1

Không nên là 'birth_years [n] = year [index]'? – DSM

+0

Đúng vậy. Cảm ơn! – Blender

1
birth_years = {} 
for i in range(len(name)): 
    birth_years[name[i]] = year[i] 
+4

Làm thế nào rất unpythonic. –

0

Danh sách của bạn sẽ được đặt tên tốt hơn namesyears. Bạn đã có một khởi đầu tốt bằng cách cố gắng làm điều đó với một vòng lặp for. Hầu hết các vấn đề xử lý dữ liệu thực tế liên quan đến kiểm tra lỗi, điều này chỉ là một chút khó khăn với một lớp lót. Ví dụ:

birth_years = {} 
for i, name in enumerate(names): 
    if name in birth_years: 
     log_duplicate(i, name, years[i])) 
    else: 
     birth_years[name] = years[i] 
1

Thử hiểu từ điển:

birth_years = {nm:year[idx] for idx, nm in enumerate(name)} 
Các vấn đề liên quan