删除值为另一个键子集的键的python字典条目

删除值为另一个键子集的键的python字典条目,python,dictionary,defaultdict,Python,Dictionary,Defaultdict,我有一本使用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

我有一本使用
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"]}

编辑:

因此,应要求,这是我的尝试:

#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
你可以试试这个

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']}

我投票结束这个问题,因为这既不是代码编写,也不是教程服务。你想让我发布我失败的尝试吗?我需要帮助解决一个我一直坚持的编程问题,我不明白它是如何被视为离题的;给出一个包含输入、预期和实际输出的示例。您不需要发布所有尝试,只需发布最接近的一个或多个。@jonrsharpe可能过于警惕,但示例代码会有所帮助。另外,为了澄清,如果
A
的值是
B
的值的子集,那么您希望
A
被分配所有
B
的值,对吗?如果
A
的值是多个其他键值的子集,该怎么办?另外,我支持@martineau的建议,即使用内置的
set
类型。谢谢,这非常有效。你介意把它拆开一点吗。我很难理解到底发生了什么事。crysis405:自己把它拆开是一个很好的练习,这样你就可以学会自己写了。是的,我一定要试一下。非常感谢。
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']}