Python从字典中删除“重复”元组

时间:2018-10-16 18:30:24

标签: python python-3.x dictionary tuples

我有这本以元组为键的字典。所有这些元组都有两个值,我将使用字母作为值来使事情保持简单,例如元组(a,b)。

两个值的顺序无关紧要,这意味着(a,b)本质上与(b,a)相同(或排序重复)。因此,我试图写一些可以删除所有这些冗余键,值对的东西,只是它不起作用,而且我对此深信不疑。我确定这只是我所忽略的简单事情,无论我如何解决。

我认为这会起作用:

def undupe_overlaps(overlaps):
    dupes = []
    for key, item in overlaps.items():
        if (key[1], key[0]) in overlaps:
            dupes.append((key[1], key[0]))
    for item in dupes:
    overlaps.pop(item)
    return overlaps

overlaps是字典,我使用列表重复,因为您不能从dict中删除内容并同时遍历它。任何帮助或提示将不胜感激:)

2 个答案:

答案 0 :(得分:1)

您的if语句是错误的。应该是:

if (key[1], key[0]) not in dupes:
        dupes.append(key)

基本上,您是在询问dupes列表中是否不存在具有反转元素的当前键。

您的代码段不起作用,因为您正在查看重叠部分,如果存在反向键,则插入当前键。这样,“单”键(即没有对应键的键)就永远不会插入dupers中。

答案 1 :(得分:0)

您可以将键与字典分开转换为列表,然后在遍历键时修改字典。

def undupe_overlaps(overlaps):
    dupes = set()
    for key_tuple in list(overlaps.keys()):
        if key_tuple in dupes or (key_tuple[1], key_tuple[0]) in dupes:
            overlaps.pop(key_tuple)
        dupes.add(key_tuple)
    return overlaps