交集在集
我有my_dict
设置为值,我有x
这也是一组。交集在集
我需要从包含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]
当交叉点变为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)
来代替整数键或者更简洁:'print([k for k,v in my_dict.items()if v&x == x])' – janos
或者干脆用' x.issubset(my_dict [I])'。无需创建中间设置。 –
是的,你可以做列表理解,但最好给出OP想要的形式的答案。 –
我建议你使用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)]
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)
要检查组的全部是另一组中,这样的最好的(在我的opinon)是使用<
和>
算子,这些算子在数学中相当于“是超集”,相当于set.issuperset
方法。这种方式的优点是,>=
和<=
运营商自然可用来检查非严格超集。
这里是做的相当的idomatic方式:
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]
这也可以使用issubset
函数来解决。这里有一个例子:
for i in my_dict:
if x.issubset(my_dict[i]):
new_list.append(i)
输出:[1]
在这个例子中,我们正在检查字典中的每一个键值对的值是否是一个超集x的(换句话说x属于到my_dict[i]
),如果是这种情况,那么我们只是将索引追加到期望的列表中。
举例来说,你应该用字母 – PRMoureu