Python 删除字典中的元素
我有一本由以下列表组成的词典:Python 删除字典中的元素,python,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两个元素的三元
>>> 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]
我有以下一段代码(根本不做任何事情):
我不知道如何从字典
triplets
中删除这些元素(我使用print
语句来模拟我想要的内容)。我不太确定是否正确,但请看一看并发表评论:
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]
]
但是:
我想知道你为什么有cset1
和cset2
。看起来,您应该只使用cset2
,其值为
[[5], [1, 8], [1, 9], [1, 11]]
你能解释一下你打算用这个数据结构实现什么,或者它是从哪里产生的吗?只是为了避免出现X-Y问题。@Hyperboreus,什么是X-Y问题?@PaulDraper问了一个关于X的问题,试图解决Y。你必须解析cset2和cset1,首先得到值,知道你是否有你需要的,然后找到你需要的,得到字典的键。然后使用del triplets[key]将其删除。但你所展示的在我看来是列表,而不是字典。这是一段计算一阶[1个元素]、二阶[2个元素]和三阶[3个元素]割集(用于电路可靠性)的代码。我已经正确计算了一阶和二阶割集(存储在cset1和cset2中)。三阶割集是存储在三元组中减去cset1和cset2的三元组。我不知道如何从三元组中减去cset1和cset2(以生成cset3)。我确信cset1和cset2是字典。我在开始计算时将它们定义为cset1={}和cset2={}。谢谢你,保罗。我运行了你的代码,它的回答是:“错误:any()只接受一个参数(给定2个)”,谢谢你。我运行代码时没有问题,但当我使用数据时,它的回复是:TypeError:unsupported operand type for-:“list”和“set”。我不明白为什么,因为cset1、cset2和三元组被定义为字典。我已经将cset2(为了与cset1具有相同的结构)转换为集合列表的dict,而不是列表列表的dict。请参阅我的代码中的注释。但是您可以简单地用
set(y)-set(x)
替换最后一个y-set(x)
。
[[5], [1, 8], [1, 9], [1, 11]]