集合元素的组合

2024-05-19 14:43:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典。你知道吗

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

我想找出两个元素的组合,其中每个元素必须来自dict的不同键

例如:('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')作为两个不同的组合,但我只想要其中一个。你知道吗


Tags: in元素for字典typeclassincidentcc1
1条回答
网友
1楼 · 发布于 2024-05-19 14:43:35

将所有值传递给^{},而不是嵌套在键上的循环;它将选择给定长度的唯一组合:

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

相关问题 更多 >