【发布时间】:2015-10-07 08:57:47
【问题描述】:
我有一个包含列表的字典,需要一种快速删除列表的方法。
我知道如何使用 set() 函数单独删除列表的重复数据,但在这种情况下,我想要一种快速迭代字典的方法,在途中对每个列表进行重复数据删除。
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])}
编辑:在下面 PM 2Ring 的评论之后,我现在以不同的方式填充 dict 以避免首先出现重复。以前我使用的是列表,但是使用集合可以防止默认情况下添加重复项;
>>> 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])
如您所见,根据需要,最终输出是重复数据集。
【问题讨论】:
-
对保留顺序不感兴趣,而且我的列表也是字典的一部分。
-
如果您不需要保持顺序,那么请使用基于集合的方法:它比基于列表的方法更有效,但如果您的列表是小,或者如果他们有几个骗子。并考虑将集合而不是列表存储为您的字典值。 OTOH,对于非常小列表,基于集合的方式可能较慢。此外,集合使用的内存比列表多一点。
-
@PM2Ring 我最后还是使用了集合,所以一开始就避免了受骗。附加到集合的 defaultdict(set) 和 .add(n) 起到了作用。 Q 已更新。
标签: python list dictionary