当前位置: 首页 > 知识库问答 >
问题:

集合元素的组合

纪枫
2023-03-14

我有一本字典。

d = {
    'Cause Class': {'CC1', 'CC2'},
    'Cause Type': {'Ct1', 'Ct2', 'Ct3', 'Ct4'},
    'Incident Type': {'It1', 'It2', 'It3'}
} 

我想找到两个元素的组合,其中每个元素必须来自不同的判决键。

例如:('CC1','Ct1')就是这样的组合,而('Ct1','Ct2')不是这样的组合。

我已经试过这个了

ksgg = []
for i in d:
    #print(i)
    for j in d:
        if i != j:
            ksgg.append(list(set(it.product(d[i],d[j]))))

但是它给了('CC1','Ct1')('Ct1','CC1')两个不同的组合,但是我只想要其中一个。

共有1个答案

毋城
2023-03-14

不要在键上嵌套循环,而是将所有值传递给itertools。组合();它将选择给定长度的唯一组合:

from itertools import combinations, product

ksgg = []
for set1, set2 in combinations(d.values(), 2):
    ksgg += product(set1, set2)

对于给定词典,将创建以下组合:

>>> from itertools import combinations, product
>>> for set1, set2 in combinations(d, 2):
...     print(set1, set2, sep=' - ')
...
Cause Class - Cause Type
Cause Class - Incident Type
Cause Type - Incident Type

配对的确切顺序根据字典顺序而不同。

完整演示:

>>> ksgg = []
>>> for set1, set2 in combinations(d.values(), 2):
...     ksgg += product(set1, set2)
...
>>> from pprint import pprint
>>> pprint(ksgg)
[('CC1', 'Ct4'),
 ('CC1', 'Ct2'),
 ('CC1', 'Ct1'),
 ('CC1', 'Ct3'),
 ('CC2', 'Ct4'),
 ('CC2', 'Ct2'),
 ('CC2', 'Ct1'),
 ('CC2', 'Ct3'),
 ('CC1', 'It2'),
 ('CC1', 'It1'),
 ('CC1', 'It3'),
 ('CC2', 'It2'),
 ('CC2', 'It1'),
 ('CC2', 'It3'),
 ('Ct4', 'It2'),
 ('Ct4', 'It1'),
 ('Ct4', 'It3'),
 ('Ct2', 'It2'),
 ('Ct2', 'It1'),
 ('Ct2', 'It3'),
 ('Ct1', 'It2'),
 ('Ct1', 'It1'),
 ('Ct1', 'It3'),
 ('Ct3', 'It2'),
 ('Ct3', 'It1'),
 ('Ct3', 'It3')]
 类似资料:
  • 假设有几个数组: 我需要找出所有可能的元素集合(1,2,3,4,5...)中的每一个在至少两个阵列(A,B,C....)并以下列方式显示它们: 实际输入是包含字符串的文件。可能有数千个文件,每个文件可能包含一百多个密钥字符串。 我尝试了下面的方法:首先,我通过比较所有可能的数组对来生成元素集。然后,我试图通过使用逻辑生成其他集合——元素集合的交集在数组集合的并集中很常见。像这样: 从上面我们可以得

  • 这是一个算法问题。如果我错过了Python中任何有帮助的现有函数,请大喊一声。 给定一组元素的,我们可以在Python中使用函数来找到所有唯一的k元素子集。让我们调用包含所有这些子集的集合。请注意,每个这样的子集都有不同的元素。 问题是两步走。首先,给定这些k-不同元素子集,我想组合(其中的一些),这样(组合只是一些子集的超集): > 构图中任意两个子集之间的交集为空 构图中所有子集的并集给出的正

  • smove srckey dstkey member 从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set类型返回错误

  • 问题内容: 我不了解Python从保持集中应用的顺序。例如: 的顺序是。为什么“ A”在“ C”之前(可能是字母顺序)?为了保留添加顺序,我必须做什么? 问题答案: 您不能有订单集。而且没有办法告诉Python如何订购它。检查此答案以找到替代方法。

  • 问题内容: 我有一个包含一组其他实体的实体。 Entity1包含SetEntityTwos 我想为entityTwos内部的“ id”字段创建搜索条件。 我搜索了,但没有得到任何答案。有人有主意吗? 谢谢,斯里 问题答案: 很容易。就像是:

  • 问题内容: 我有一个Python,我将根据条件从中逐个删除元素。当集合只剩下1个元素时,我需要返回该元素。如何从集合中访问此元素? 一个简化的例子: 问题答案: 用途: 在您的情况下,它将是: 但是请注意,这将从集合中删除该项目。如果不希望这样做,则可以使用| : 演示: