Удалите записи из словаря Python для ключей со значениями, которые являются подмножеством другого ключа

У меня есть словарь сгенерированный с помощью defaultdict:

{"GGGAAATTTCCCTTTGGGAAACGG": ["9/1", "9/2", "1/1.1", "9/2.1"],
 "GGGAAATTTCCCTTTGGGAAAGCC": ["9/2", "9/2.1"],
 "GGGAAATTTCCCTTTGGGAAAGGG": ["1/1", "1/2", "9/1", "1/1.1"]}

Одна из энтитей является подмножеством другой по своим значениям:

"GGGAAATTTCCCTTTGGGAAAGCC": ["9/2", "9/2.1"]

это подмножество

"GGGAAATTTCCCTTTGGGAAACGG": ["9/1", "9/2", "1/1.1", "9/2.1"]

Как бы мне было свернуть словарь, чтобы в итоге я получил любой из этих результатов?

{"GGGAAATTTCCCTTTGGGAAACGG": ["9/1", "9/2", "1/1.1", "9/2.1"],
 "GGGAAATTTCCCTTTGGGAAAGGG": ["1/1", "1/2", "9/1", "1/1.1"]}

или же

{["GGGAAATTTCCCTTTGGGAAACGG", "GGGAAATTTCCCTTTGGGAAAGCC"]:
    ["9/1", "9/2", "1/1.1", "9/2.1"],
 "GGGAAATTTCCCTTTGGGAAAGGG":
    ["1/1", "1/2", "9/1", "1/1.1"]}

Редактировать:

Итак, как я и просил, это была моя попытка:

#dd is my defaultdict
for keys, values in dd.iteritems():
        if all(for item in values:
                if item in dd.items():
                    return True
                else:
                    return False):
             print keys

1 ответ

Решение

Вы можете попробовать это

mydict = {"GGGAAATTTCCCTTTGGGAAACGG": ["9/1", "9/2", "1/1.1", "9/2.1"],
 "GGGAAATTTCCCTTTGGGAAAGCC": ["9/2", "9/2.1"],
 "GGGAAATTTCCCTTTGGGAAAGGG": ["1/1", "1/2", "9/1", "1/1.1"]}

>>>dict([i for i in mydict.items() if not any(set(j).issuperset(set(i[1])) and j!=i[1] for j in mydict.values())])

{'GGGAAATTTCCCTTTGGGAAACGG': ['9/1', '9/2', '1/1.1', '9/2.1'],
 'GGGAAATTTCCCTTTGGGAAAGGG': ['1/1', '1/2', '9/1', '1/1.1']}

ИЛИ просто

for i in mydict.items():
    for j in mydict.values():
        if i[1]!=j:
            if set(j).issuperset(set(i[1])):
                mydict.pop(i[0])

>>>mydict
{'GGGAAATTTCCCTTTGGGAAACGG': ['9/1', '9/2', '1/1.1', '9/2.1'],
 'GGGAAATTTCCCTTTGGGAAAGGG': ['1/1', '1/2', '9/1', '1/1.1']}
Другие вопросы по тегам