У меня есть список, содержащий списки, и вам нужен быстрый способ дедуплирования списков.Самый быстрый способ дедуплексного списка в dict
Я знаю, как дедуплировать список изолированно с помощью функции set(), но в этом случае я хочу быстрый способ итерации через dict, дедуплируя каждый список на этом пути.
hello = {'test1':[2,3,4,2,2,5,6], 'test2':[5,5,8,4,3,3,8,9]}
Я хочу, чтобы это выглядело как;
hello = {'test1':[2,3,4,5,6], 'test2':[5,8,4,3,9]}
Хотя я не обязательно должен иметь первоначальный порядок сохраненных списков.
Я попытался с помощью набора, как это, но это не совсем правильно (это не перебор должным образом, и я теряю первый ключ)
for key, value in hello.items(): goodbye = {key: set(value)}
>>> goodbye
{'test2': set([8, 9, 3, 4, 5])}
EDIT: После комментария PM 2Ring в ниже, Я теперь заполняю диктовку иначе, чтобы избежать дублирования в первую очередь. Раньше я использовал списки, но использование наборов предотвращает добавление дубликатов по умолчанию;
>>> 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])
Как вы можете видеть, конечный выход представляет собой деблокированный набор, если требуется.
не заинтересован в сохранении порядка, а также мои списки часть диктата. –
Если вам не нужно сохранять порядок, то перейдите на подход, основанный на наборе: он более эффективен, чем подходы, основанные на списках, но вы можете не заметить большую разницу в скорости, если ваши списки невелики или если у них мало обманов , И подумайте о хранении наборов, а не о списках в качестве значений вашего dict. OTOH, для _very_ маленьких списков метод на основе набора может быть _slower_. Кроме того, наборы используют немного больше памяти, чем списки. –
@ PM2Ring Я пошел с использованием наборов в конце, поэтому избегал обманов в первую очередь. defaultdict (set) и .add (n), чтобы добавить к набору, сделали трюк. Q обновлено. –