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

时间:2015-07-19 14:25:53

标签: python dictionary duplicates 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 = [(400,500),(440,888),(494,585),(272,574),(2772,4488)]

问题在于我忘记了这些成员的来源。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我想我解决了,如果我错了,请任何人纠正我,但我确实得到了正确的输出:     导入集合     来自集合import 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)]})

因此,曾经有重复值的地方会被“无”字替换。无法想到更好的事情。