如何从 Python 列表字典中的值生成所有组合

新手上路,请多包涵

我想生成字典中索引的列表中的所有值组合:

 {'A':['D','E'],'B':['F','G','H'],'C':['I','J']}

每次,每个 dict 条目中的一个项目都会被挑选出来并与其他键中的项目组合,所以我有:

 ['D','F','I']
['D','F','J']
['D','G','I']
['D','G','J']
['D','H','I']
...
['E','H','J']

我知道在 itertools 列表中有一些东西可以生成项目组合,但我认为我不能在这里使用它,因为我有不同的值“池”。

是否有任何现有的解决方案可以做到这一点,或者我应该如何自己着手去做,我对这种嵌套结构非常困惑。

原文由 ibi0tux 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 670
2 个回答
import itertools as it

my_dict={'A':['D','E'],'B':['F','G','H'],'C':['I','J']}
allNames = sorted(my_dict)
combinations = it.product(*(my_dict[Name] for Name in allNames))
print(list(combinations))

哪个打印:

 [('D', 'F', 'I'), ('D', 'F', 'J'), ('D', 'G', 'I'), ('D', 'G', 'J'), ('D', 'H', 'I'), ('D', 'H', 'J'), ('E', 'F', 'I'), ('E', 'F', 'J'), ('E', 'G', 'I'), ('E', 'G', 'J'), ('E', 'H', 'I'), ('E', 'H', 'J')]

原文由 Maryam 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你想保留 key:value 在你可以使用的排列中:

 import itertools
keys, values = zip(*my_dict.items())
permutations_dicts = [dict(zip(keys, v)) for v in itertools.product(*values)]

这将为您提供带有排列的字典列表:

 print(permutations_dicts)
[{'A':'D', 'B':'F', 'C':'I'},
 {'A':'D', 'B':'F', 'C':'J'},
 ...
 ]

免责声明: 不完全是 OP 的要求,但谷歌派我来这里寻找。如果您想获得 OP 要求的内容,您应该只删除列表理解中的 dict 部分,即

permutations_dicts = [v for v in itertools.product(*values)]

原文由 Pablo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏