Bạn đã đề cập trong nhận xét rằng bạn có mục nhập trùng lặp. Chúng ta có thể làm việc với điều này. Hãy phương pháp ưa thích của bạn tạo ra danh sách các hàng, và mở rộng nó thành một vòng lặp for
:
from itertools import izip
dictionary = {}
for k, v in izip(List[::2], List[1::2]):
if k not in dictionary:
dictionary[k] = set()
dictionary[k].add(v)
Hoặc chúng ta có thể sử dụng collections.defaultdict
vì vậy chúng tôi không cần phải kiểm tra xem một chìa khóa đã được khởi tạo:
from itertools import izip
from collections import defaultdict
dictionary = defaultdict(set)
for k, v in izip(List[::2], List[1::2]):
dictionary[k].add(v)
Chúng tôi sẽ kết thúc bằng một từ điển có tất cả các khóa được đặt và các bộ chứa các giá trị. Điều này vẫn có thể không thích hợp, bởi vì bộ, như từ điển, không thể giữ bản sao, vì vậy nếu bạn cần một khóa duy nhất để giữ hai giá trị giống nhau, bạn sẽ cần phải thay đổi nó thành một bộ hoặc danh sách. Nhưng điều này sẽ giúp bạn bắt đầu.
Nguồn
2009-12-22 02:58:53
Bạn có thể loại bỏ '[]' s để thay đổi danh sách hiểu thành máy phát để đạt hiệu quả cao hơn: 'dict ((Danh sách [i], Danh sách [i + 1]) cho i trong phạm vi (0 , len (List), 2)) 'Bằng cách đó, nó sẽ không tạo ra một danh sách chỉ sau đó vứt nó đi sau khi nó được chuyển đổi thành một dict. –
Bạn của tôi là một người tiết kiệm cuộc sống, Chúa ban phước cho bạn. Bây giờ tôi đã làm việc này trong hai giờ –
OK, [] điều tôi đã để lại trước tiên cho khả năng tương thích py2.3, * và * cũng thực tế là tôi đã nghe chính xác - đối với các bộ sưu tập rất nhỏ, việc xây dựng danh sách là nhanh hơn chi phí xây dựng máy phát điện. Tôi có thể hỏi đồng nghiệp của tôi để biết thêm chi tiết về vấn đề này nhưng nó có ý nghĩa. – zzzeek