2011-05-08 29 views
9

Tôi đang cố chuyển đổi danh sách sang từ điển bằng cách sử dụng chức năng dict.Một số vấn đề với chức năng dict

inpu = input.split(",") 
dic = dict(inpu) 

Đoạn mã trên đang cố gắng để có được một chuỗi và split nó trên ',' và sau đó tôi sử dụng dict chức năng để chuyển đổi danh sách để một cuốn từ điển.

Tuy nhiên, tôi nhận được lỗi này:

ValueError: dictionary update sequence element #0 has length 6; 2 is required

Ai có thể giúp đỡ?

+0

Hãy cho chúng tôi một ví dụ về đầu vào của bạn và giải thích những gì bạn mong đợi xảy ra. – NPE

+0

Bạn có thể muốn sử dụng 'set' thay vì' dict'. –

Trả lời

17

dict hy vọng có thể lặp lại các vùng chứa 2 phần tử (như danh sách các bộ dữ liệu). Bạn không thể chỉ cần vượt qua một danh sách các mục, nó không biết chìa khóa là gì và giá trị là gì.

Bạn đang cố gắng để làm điều này:

>>> range(10) 
<<< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> dict(range(10)) 
--------------------------------------------------------------------------- 
TypeError: cannot convert dictionary update sequence element #0 to a sequence 

dict hy vọng một danh sách như thế này:

>>> zip(lowercase[:5], range(5)) 
<<< 
[('a', 0), 
('b', 1), 
('c', 2), 
('d', 3), 
('e', 4)] 

Yếu tố đầu tiên trong tuple trở thành chìa khóa, thứ hai trở thành giá trị.

>>> dict(zip(lowercase[:5], range(5))) 
<<< 
{'a': 0, 
'b': 1, 
'c': 2, 
'd': 3, 
'e': 4} 
0

Từ điển là cặp khóa-giá trị, đó là lý do tại sao cần phải liệt kê các danh sách dài-2 để khớp các khóa với giá trị. Bạn đang chia đầu vào thành một danh sách phẳng, đó là lý do tại sao Python đang phàn nàn trong trường hợp này - nó không biết phải chỉ định khóa nào và những gì để chỉ định làm giá trị.

2

Như được liệt kê trên Python Data structures Tài liệu. Phương thức khởi tạo dict() xây dựng các từ điển trực tiếp từ danh sách các cặp khóa-giá trị được lưu trữ dưới dạng bộ dữ liệu.

nên mảng Inpu phải có hình thức ('chìa khóa', 'giá trị') tại mỗi vị trí, ví dụ

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) 
{'sape': 4139, 'jack': 4098, 'guido': 4127} 

mảng đầu vào của bạn có lẽ là lớn hơn 2 kích thước

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