gpt4 book ai didi

python - 生成列表字典的所有排列的组合(按特定顺序)

转载 作者:行者123 更新时间:2023-11-28 22:00:59 26 4
gpt4 key购买 nike

我有一个列表字典

d = {'A': [1,2,3], 'B': [4,5], 'C': [6]}

我需要生成每个列表(A、B 和 C)的所有排列。这没关系。

p = {}
for k in d.keys():
p[k] = [i for i in itertools.permutations(d[k])]

这导致 p

{'A': [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)],
'B': [(4, 5), (5, 4)],
'C': [(6,)]}

然后我需要合并来自 A、B 和 C 列表的元组,但要按特定顺序(例如按 sorted(p.keys()) 的顺序,这实际上给出了 [' A'、'B'、'C'])。所以我应该获得整数元组列表:

[(1,2,3,4,5,6),
(1,2,3,5,4,6),
(1,3,2,4,5,6),
(1,3,2,5,4,6),
...
(3,2,1,5,4,6)
]

我知道 itertools.product 可以在这种情况下使用,但是初始字典 d 可以包含任意数量的具有不同键的值,我不知道知道如何在这种情况下使用它。或者,也许您将能够针对所描述的问题提出完全不同的解决方案。最终解决方案越快越好。

最佳答案

像这样:

from itertools import permutations, product, chain

d = {'A': [1,2,3], 'B': [4,5], 'C': [6]}
# You don't need to materialise permutations here, but this matches your existing dict
p = {k:list(permutations(v)) for k, v in d.iteritems()}

for blah in product(*map(p.get, sorted(p))):
print list(chain.from_iterable(blah)) # or use tuple instead of list

[1, 2, 3, 4, 5, 6]
[1, 2, 3, 5, 4, 6]
[1, 3, 2, 4, 5, 6]
[1, 3, 2, 5, 4, 6]
[2, 1, 3, 4, 5, 6]
[2, 1, 3, 5, 4, 6]
[2, 3, 1, 4, 5, 6]
[2, 3, 1, 5, 4, 6]
[3, 1, 2, 4, 5, 6]
[3, 1, 2, 5, 4, 6]
[3, 2, 1, 4, 5, 6]
[3, 2, 1, 5, 4, 6]

关于python - 生成列表字典的所有排列的组合(按特定顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com