Python删除列表字典中的重复项

时间:2017-03-21 22:45:23

标签: python list dictionary nested unique

我的字典看起来像这样:

dictionary= {apple:[3,5], banana:[3,3,6], strawberry:[1,2,4,5,5]}

我如何为每个值/列表删除所有重复项(因此创建一组)?

我希望新词典看起来像这样:

{apple:[3,5], banana:[3,6], strawberry:[1,2,4,5]}

3 个答案:

答案 0 :(得分:5)

使用dict理解并设置删除重复

d= {'apple':[3,5], 'banana':[3,3,6], 'strawberry':[1,2,4,5,5]}
print {k:list(set(j)) for k,j in d.items()}

结果

{'strawberry': [1, 2, 4, 5], 'apple': [3, 5], 'banana': [3, 6]}

如果您想保留列表顺序

d= {'apple':[3,5,5,8,4,5], 'banana':[3,3,6,1,1,3], 'strawberry':[5,1,1,2,4,5,5]}
print {k:sorted(set(j),key=j.index) for k,j in d.items()}

结果:

{'strawberry': [5, 1, 2, 4], 'apple': [3, 5, 8, 4], 'banana': [3, 6, 1]}

答案 1 :(得分:2)

for lst in dictionary.values():
    lst[:] = list(set(lst))

通过set可能会改变顺序。如果不能发生这种情况,OrderedDict是一个选项:

for lst in dictionary.values():
    lst[:] = list(collections.OrderedDict.fromkeys(lst))

或者如果要对列表进行排序,您可以这样做:

for lst in dictionary.values():
    lst[:] = sorted(set(lst))

或者如果已对列表进行了排序,则可以保留第一个元素以及与之前元素不重复的每个元素。

for lst in dictionary.values():
    lst[:] = lst[:1] + [b for a, b in zip(lst, lst[1:]) if a != b]

答案 2 :(得分:0)

 dictionary= {"apple":[3,5], "banana":[3,3,6], "strawberry":[1,2,4,5,5]}
 for key,item in dictionary.items():
     dictionary[key]=set(item)

 print(dictionary)

输出:

 {'apple': {3, 5}, 'banana': {3, 6}, 'strawberry': {1, 2, 4, 5}}