我有一个由列表组成的字典:
>>> 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
语句作为我想要的虚拟对象。)
答案 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]
]
可是:
我想知道为什么你有cset1
和cset2
。看起来好像只有cset2
,其值为
[[5], [1, 8], [1, 9], [1, 11]]