减去字典的元素

时间:2013-12-16 01:25:57

标签: python

我有一个由列表组成的字典:

>>> triplets.get(k)
[[1, 3, 15], [1, 3, 13], [1, 3, 11], [1, 3, 9], [1, 3, 8], [1, 3, 5], [1, 4, 15]

还有字典:

>>> cset1.get(k)
[set([5])]

>>> cset2.get(k)
[[1, 8], [1, 9], [1, 11]]

我想删除包含cset1元素或cset2两个元素的三元组元素,即我想删除包含[1,3,5]的{​​{1}}以及{ {1}}包含[5]的两个元素。

我有以下代码(根本不做任何事情):

[1, 3, 8], [1, 3, 9], [1, 3, 11]

我无法弄清楚如何从字典cset2中删除这些元素(我使用CDln = len(triplets.get(k)) for ii in range(CDln): if cset1.get(k) in triplets.get(k)[ii] or cset2.get(k) in triplets.get(k)[ii]: print "delete element of triplets in location:", ii 语句作为我想要的虚拟对象。)

2 个答案:

答案 0 :(得分:1)

我不确定我是否帮助你,但请看一下并发表评论:

k = 42 #whatever
triplets = {k: [[1, 3, 15], [1, 3, 13], [1, 3, 11], [1, 3, 9], [1, 3, 8], [1, 3, 5], [1, 4, 15]]}
cset1 = {k: [set([5])]}
cset2 = {k: [{1, 8}, {1, 9}, {1, 11}]} #changed this to sets

triplets[k] = [x for x in triplets[k] if
                all (y - set(x) for y in cset1[k]) and
                all (y - set(x) for y in cset2[k])
                ]
print(triplets[k])

答案 1 :(得分:0)

我不确定ii是什么,但我认为这就是你想要的。

b = cset1[k]
c = cset2[k]
triplets[k] = filter(
    lambda lst:
        any(lambda x: x in b, lst) or
        any(lambda c1: all(lambda x: x in c1), c),
    triplets[k]
]

可是:

我想知道为什么你有cset1cset2。看起来好像只有cset2,其值为

[[5], [1, 8], [1, 9], [1, 11]]