如何在defaultdict(列表)中删除键之间的重复值



我有一个defaultdict(list),其中一些键有共同的值,我想删除那些共同的,所以在任何键之间没有发现相同的值。因此,重复的值只保留一次(而不是完全删除)。以下是目前的情况:

defaultdict1 = {100 : [(400, 500)], 110: [(400, 500),(440, 888)], 300: [(494,585),(272, 574),(2772, 4848)]}

期望的输出将是:

new_defaultdict1 = {100 :[(400, 500)], 110: [(440, 888)], 300: [(494,585),(272, 574),(2772, 4848)]}

如果有一种方法可以在我构建defaultdict1时进行此检查,那就更好了,但我不知道如何。如果循序渐进的过程更容易做到这一点,那也没关系。

另外,我不能确定它将如何在我的代码中结束,但是从哪个键的重复值出去并不重要,所以在这种情况下只有100(400,500)对,可能是110会保留它们。

我想了一个像这样的方法,但这并不完全是我想要的:我创建了一个列表,其中只保留字典中不重复的值:

unique_list = []
for k, v in defaultdict1.iteritems():
     for member in v:
        if member in unique_list:
            pass
        else:
           unique_list.append(member)
print unique_list

unique_list现在看起来像:unique_list =[(400500),(440、888),(494585),(272、574),(2772、4848)]

问题是我不知道这些成员来自哪里。请帮忙好吗?

我想我解决了这个问题,如果我错了,请任何人纠正我,但我确实得到了正确的输出:进口集合从集合中导入defaultdict

unique_list = []
unique_defaultdict = collections.defaultdict(list)
 data= {100 : [(400, 500)], 110: [(400, 500),(440, 888)], 300: [(494,585),(272, 574),(2772, 4848)]}
for k, v in data.iteritems():
    for member in v:
        if member in unique_list:
            unique_defaultdict[k].append('None')
        else:
            unique_list.append(member)
            unique_defaultdict[k].append(member)
print unique_defaultdict

这样我仍然保持键和它们的值"连接"到它们仍然完好无损。输出:

 defaultdict(<type 'list'>, {100: [(400, 500)], 110: ['None',(440, 888)],300: [(494,585),(272, 574),(2772, 4848)]})

因此,在曾经有重复值的地方,它被'None'取代。想不出更好的了。

最新更新