Tôi có một dict chứa danh sách và cần một cách nhanh chóng để loại trừ danh sách.Cách nhanh nhất để loại trừ danh sách trong dict
Tôi biết cách tách biệt danh sách bằng cách sử dụng hàm set(), nhưng trong trường hợp này, tôi muốn có một cách nhanh chóng lặp qua dict, deduping mỗi danh sách trên đường.
hello = {'test1':[2,3,4,2,2,5,6], 'test2':[5,5,8,4,3,3,8,9]}
Tôi muốn nó xuất hiện như;
hello = {'test1':[2,3,4,5,6], 'test2':[5,8,4,3,9]}
Mặc dù tôi không nhất thiết phải giữ thứ tự ban đầu của danh sách được lưu giữ.
Tôi đã cố gắng sử dụng một bộ như thế này, nhưng nó không hoàn toàn chính xác (nó không lặp lại đúng và tôi đang mất chìa khóa đầu tiên)
for key, value in hello.items(): goodbye = {key: set(value)}
>>> goodbye
{'test2': set([8, 9, 3, 4, 5])}
EDIT: Sau comment PM 2Ring của dưới đây, Bây giờ tôi đang phổ biến các dict khác nhau để tránh trùng lặp ở nơi đầu tiên. Trước đây tôi đã sử dụng danh sách, nhưng việc sử dụng các bộ ngăn chặn các bản sao được thêm vào theo mặc định;
>>> my_numbers = {}
>>> my_numbers['first'] = [1,2,2,2,6,5]
>>> from collections import defaultdict
>>> final_list = defaultdict(set)
>>> for n in my_numbers['first']: final_list['test_first'].add(n)
...
>>> final_list['test_first']
set([1, 2, 5, 6])
Như bạn có thể thấy, đầu ra cuối cùng là bộ được xóa, theo yêu cầu.
Không quan tâm trong việc giữ gìn trật tự, và cũng có danh sách của tôi là một phần của một dict. –
Nếu bạn không cần phải giữ gìn trật tự, hãy đi theo một phương pháp dựa trên thiết lập: nó hiệu quả hơn các cách tiếp cận dựa trên danh sách, nhưng bạn có thể không nhận thấy sự khác biệt về tốc độ nếu danh sách của bạn nhỏ hoặc nếu chúng có ít . Và xem xét việc lưu trữ bộ chứ không phải danh sách dưới dạng giá trị của dict. OTOH, cho _very_ danh sách nhỏ, cách thiết lập có thể là _slower_. Ngoài ra, bộ sử dụng bộ nhớ nhiều hơn một chút so với danh sách. –
@ PM2Ring Tôi đã đi với bộ sử dụng cuối cùng, vì vậy tránh lừa đảo ở nơi đầu tiên. defaultdict (set) và .add (n) để gắn thêm vào tập đã thực hiện thủ thuật. Đã cập nhật Q. –