从列表中获取所有不同的组合(Python)?

2024-04-26 06:31:12 发布

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

我有以下两本字典:

a={"ad":["tau","guru"],
"bigd":["tau","guru"],
"lugd":["tau","guru"]}

b={"tau":["ad","bigd","lugd"],
"guru":["bigd","ad","lugd"]}

key的每一个值都是key的一个优先顺序。我试图用python实现的是如何获得所有可能的优先顺序组合。 所以一个优先顺序是,当你只翻转键“ad”的值时,其余的都是一样的。它列在下面

a={"ad":["guru", "tau"],
"bigd":["tau","guru"],
"lugd":["tau","guru"]}

b={"tau":["ad","bigd","lugd"],
"guru":["bigd","ad","lugd"]}

另一种可能是“ad”首选项保持不变而“bigd”首选项不同。我们必须遍历两个字典中的所有列表,找到所有2^3*3*2的可能性。有人能帮我吗?你知道吗


Tags: key列表字典顺序可能性ad首选项tau
1条回答
网友
1楼 · 发布于 2024-04-26 06:31:12

您可以使用itertools获取它们:

from itertools import permutations, product

a_variants = [dict(zip(["ad", "bigd", "lugd"], values)) 
                 for values in product(permutations(["tau","guru"]), repeat=3)]
b_variants = [dict(zip(["tau", "guru"], values)) 
                 for values in product(permutations(["ad", "bigd", "lugd"]), repeat=2)]

all_variants = product(a_variants, b_variants)

for va, vb in all_variants:
    print("a:", va, "\nb:", vb, "\n")

输出:

a: {'ad': ('tau', 'guru'), 'bigd': ('tau', 'guru'), 'lugd': ('tau', 'guru')} 
b: {'tau': ('ad', 'bigd', 'lugd'), 'guru': ('ad', 'bigd', 'lugd')} 

a: {'ad': ('tau', 'guru'), 'bigd': ('tau', 'guru'), 'lugd': ('tau', 'guru')} 
b: {'tau': ('ad', 'bigd', 'lugd'), 'guru': ('ad', 'lugd', 'bigd')} 

...

a: {'ad': ('guru', 'tau'), 'bigd': ('guru', 'tau'), 'lugd': ('guru', 'tau')} 
b: {'tau': ('lugd', 'bigd', 'ad'), 'guru': ('lugd', 'ad', 'bigd')} 

a: {'ad': ('guru', 'tau'), 'bigd': ('guru', 'tau'), 'lugd': ('guru', 'tau')} 
b: {'tau': ('lugd', 'bigd', 'ad'), 'guru': ('lugd', 'bigd', 'ad')} 

请注意,您有2**3*(3*2)**2=288个不同的输出。你知道吗

相关问题 更多 >