如何检查和删除字典中项目的重复值?
我有大量的数据集,因此我正在寻找一种有效的方法。以下是包含重复项的字典中的值的示例:
'word': [('769817', [6]), ('769819', [4, 10]), ('769819', [4, 10])]
需要成为
'word': [('769817', [6]), ('769819', [4, 10])]
最佳答案
从本质上讲,此问题归结为从无法散列的类型列表中删除重复项,因为这些类型无法转换为集合。
一种可能的方法是在建立新列表值的同时检查当前值的成员资格。
d = {'word': [('769817', [6]), ('769819', [4, 10]), ('769819', [4, 10])]}
for k, v in d.items():
new_list = []
for item in v:
if item not in new_list:
new_list.append(item)
d[k] = new_list
或者,使用
groupby()
以获得更简洁的答案,尽管可能会更慢(必须首先对列表进行排序(如果已排序,则比进行成员资格检查要快))。import itertools
d = {'word': [('769817', [6]), ('769819', [4, 10]), ('769819', [4, 10])]}
for k, v in d.items():
v.sort()
d[k] = [item for item, _ in itertools.groupby(v)]
输出->
{'word': [('769817', [6]), ('769819', [4, 10])]}