Python удаляет дублирующиеся кортежи из словаря - PullRequest
0 голосов
/ 16 октября 2018

У меня есть этот словарь с кортежами в качестве ключей.Все эти кортежи получили два значения, я буду использовать буквы в качестве значений для простоты, например, кортеж (a, 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

перекрытия - это словарь, и яиспользуйте список dupes, потому что вы не можете удалить вещи из dict и зациклить его одновременно.Любая помощь или советы будут оценены:)

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Ваше if утверждение неверно.Это должно быть:

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

По сути, вы просите, чтобы текущий список с инвертированным элементом еще не присутствовал в списке dupes.

Ваш фрагмент кода не работает, потому что вы смотрите на совпадения и вставляете текущий ключ, если присутствует инвертированный.Таким образом, «одиночные» ключи, то есть те, которые не имеют своего аналога, никогда не вставляются в dupers.

0 голосов
/ 16 октября 2018

Вы можете преобразовать ключи в список отдельно от dict, а затем изменить его при переборе ключей.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...