Mam dyktować listy i potrzebuję szybkiego sposobu na dedupe list.Najszybszy sposób dedupe listy w dyktafonie
Wiem, jak dedupe listę w izolacji za pomocą funkcji set(), ale w tym przypadku chcę szybki sposób iteracji przez dykt, deduputując każdą listę na drodze.
hello = {'test1':[2,3,4,2,2,5,6], 'test2':[5,5,8,4,3,3,8,9]}
Chciałbym, żeby wyglądało jak;
hello = {'test1':[2,3,4,5,6], 'test2':[5,8,4,3,9]}
Chociaż niekoniecznie muszę mieć zachowany pierwotny porządek list.
Próbowałem przy użyciu zestawu takiego, ale nie jest to całkiem poprawne (nie jest iteracja prawidłowo i tracę pierwszy klucz)
for key, value in hello.items(): goodbye = {key: set(value)}
>>> goodbye
{'test2': set([8, 9, 3, 4, 5])}
EDIT: Po komentarza premiera 2Ring jest poniżej, Teraz zapełniam dyktando inaczej, niż unikam duplikatów. Poprzednio używałem list, ale używanie zestawów zapobiega domyślnemu dodawaniu duplikatów;
>>> 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])
Jak widać, ostateczne wyjście jest zbiorem dedupowanym, zgodnie z wymaganiami.
Nie interesuje porządek zachowania, a także moje listy są część dyktatu. –
Jeśli nie zachowujesz porządku, wybierz podejście oparte na zestawie: jest to bardziej efektywne niż podejście oparte na listach, ale możesz zauważyć różnicę prędkości, jeśli twoje listy są małe lub mają niewiele duplikatów . I rozważ przechowywanie zestawów zamiast list jako wartości twojego dyktatora. OTOH, dla "małych" małych list, metoda oparta na zestawie może być "wolniejsza". Ponadto zestawy używają trochę więcej pamięci niż listy. –
@ PM2Ring Poszedłem z użyciem zestawów na końcu, więc w pierwszej kolejności uniknąłem duplikatów. defaultdict (set) i .add (n) do dołączenia do zestawu zrobiły lewę. Q zaktualizowany. –