删减字典中的元素

2024-06-16 12:41:42 发布

您现在位置: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元素的三元组的元素,也就是说,我想删除包含[5]元素的[1,3,5]和同时包含cset2元素的[1, 3, 8], [1, 3, 9], [1, 3, 11]。你知道吗

我有以下代码(根本不起任何作用):

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

我不知道如何从dictionary triplets中删除这些元素(我使用print语句作为我想要的伪语句)。你知道吗


Tags: 代码in元素getlen字典语句ii
2条回答

我不太确定你说的对不对,但请看一看并发表评论:

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])

我不确定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]]

相关问题 更多 >