我的字典看起来像这样:
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]}
答案 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}}