Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除字典中的元素_Python - Fatal编程技术网

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