如何从字典中的值列表中删除重复的值?



我创建了一个字典子类,它将在引用

时自动将相同键下的重复值存储在列表中。用Python创建一个具有重复键的字典

class Dictlist(dict):
def __setitem__(self, key, value):
try:
self[key]
except KeyError:
super(Dictlist, self).__setitem__(key, [])
self[key].append(value)
d = Dictlist()
d['test'] = 1
d['test'] = 2
d['test'] = 1
d['test'] = 1
print(d)
{'test' : [1,2,1,1]}
for k,v in d.items():
d[k] = list(set(v))
print(d)
{'test': [1, 2, 1, 1, [1, 2]]}

在本例中,新列表被添加到values列表中。我只需要[1,2]的值

您已经覆盖了__setitem__,因此d[k] = list(set(v))行将调用覆盖并追加到列表中。为了直接设置键,您需要绕过覆盖并访问dict中的方法。

一种方法是在Dictlist中提供一个方法。例如:
def set_item(self, key, value):
super().__setitem__(key, value)

,然后调用d.set_item(k, list(set(v)))

如果这种惟一性是您需要对使用此旁路的字典执行的唯一操作,则可以将所有逻辑放在Dictlist的一个方法中:

def uniquify(self):
for key in self.keys():
super().__setitem__(key, list(set(self[key])))

如果由于任何原因不能修改Dictlist,可以从类外绕过:

dict.__setitem__(d, k, list(set(v)))

相关内容

  • 没有找到相关文章

最新更新