我将my_dict
设置为值,而x
也是一组。
我需要从我的dict中返回带有set的列表,其中包含x中的所有数字。如果my_dict
中的设置不包含x
中的所有数字,我不想退回。
我想使用交集(&
),但它会返回my_dict
中的所有集。
my_dict = {1: {1,2,3,4,5},
2: {1,2,3,7,8},
3: {1,2,3,4}
}
x = {1,2,5}
new_list = []
for i in my_dict:
if my_dict[i] & x:
new_list.append(i)
print(new_list)
输出:
[1, 2, 3]
我需要接收[1]
而不是[1, 2, 3]
答案 0 :(得分:2)
当交集变为x时,表示x中的所有值都出现在字典中的集合中。
for i in my_dict:
if (my_dict[i] & x)==x:
new_list.append(i)
print(new_list)
编辑:如下面的评论所示,您也可以
for i in my_dict:
if x.issubset(my_dict[i]):
new_list.append(i)
print(new_list)
答案 1 :(得分:1)
我建议您使用set.issuperset
方法,而不是使用&
运算符。当存在一个方法时,为什么要组合多个运算符来完全按照你想要的那样运行?
new_list = []
for i in my_dict:
if my_dict[i].issuperset(x):
new_list.append(i)
请注意,我通常会用列表理解来写这个:
newlist = [key for key, value in my_dict.items() if value.issuperset(x)]
答案 2 :(得分:1)
my_dict值和x之间的内部区域应该等于x,这意味着x应该是my_dict值的子集
my_dict = {1: {1,2,3,4,5},
2: {1,2,3,7,8},
3: {1,2,3,4}}
x = {1,2,5}
new_list = []
for i,j in my_dict.items():
if x.issubset(j):
new_list.append(i)
print(new_list)
答案 3 :(得分:0)
要检查整个集合是否在另一个集合中,最好的(我的意见 )方式是使用<
和>
运算符,覆盖在数学中充当“是超集”的等价物,等同于set.issuperset
方法。这种方式的优点是>=
和<=
运算符可以自然地用于检查非严格的超集。
这是一种非常独特的方式:
new_list = []
for key, value in my_dict.items():
if value >= x:
new_list.append(key)
原始代码的问题在于检查两个集合之间是否存在任何交集,即它们甚至只共享一个元素,当您似乎想要检查是否所有x: set
都在设置你正在检查。
如果您想简化代码,我还建议使用列表符号,除非您还需要执行其他步骤。
new_list = [key for key, value in my_dict.items() if value >= x]
答案 4 :(得分:0)
这也可以使用issubset
函数来解决。这是一个例子:
for i in my_dict:
if x.issubset(my_dict[i]):
new_list.append(i)
输出:[1]
在这个例子中,我们检查字典中每个键值对的值是否是x的超集(换句话说x属于my_dict[i]
),如果是这样,那么我们只需将索引附加到所需列表。