Python DICT列表之间的笛卡尔乘积,以获得所有组合

Python DICT列表之间的笛卡尔乘积,以获得所有组合,python,dictionary,combinations,cartesian-product,Python,Dictionary,Combinations,Cartesian Product,我看了很多,但我找不到一个涵盖一切的解决方案。我的问题是: 我有一个列表字典,这些列表是图中从源到目标的路径。我需要合并它们以找到它们之间的所有组合,但有一个陷阱。列表的某些路径与另一个列表中的其他路径绑定。例: 假设这条路是这样的 D = {1: ['a'], 2: ['a', 'b'], 3: ['a', 'c'], 4: ['a', 'd']} 如果没有捕获,输出将是: {1: 'a', 2: 'a', 3: 'a', 4: 'a'}, {1: 'a', 2: 'a', 3: 'a',

我看了很多,但我找不到一个涵盖一切的解决方案。我的问题是:

我有一个列表字典,这些列表是图中从源到目标的路径。我需要合并它们以找到它们之间的所有组合,但有一个陷阱。列表的某些路径与另一个列表中的其他路径绑定。例:

假设这条路是这样的

D = {1: ['a'], 2: ['a', 'b'], 3: ['a', 'c'], 4: ['a', 'd']}
如果没有捕获,输出将是:

{1: 'a', 2: 'a', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'a', 3: 'a', 4: 'd'}, 
{1: 'a', 2: 'a', 3: 'c', 4: 'a'},  
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}, 
{1: 'a', 2: 'b', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'b', 3: 'a', 4: 'd'}, 
{1: 'a', 2: 'b', 3: 'c', 4: 'a'},  
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}
{1: 'a', 2: 'a', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}, 
{1: 'a', 2: 'b', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}
因为没有tie,我可以做它们之间的笛卡尔积,但是如果是tie,我不能。如果是并列的,元素必须按索引号排列在一起。假设3-4之间有一个位,在这种情况下,我只能从它们中得到
{3:a',4:a'}
{3:c',4:d'}
,所以我的总组合是:

{1: 'a', 2: 'a', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'a', 3: 'a', 4: 'd'}, 
{1: 'a', 2: 'a', 3: 'c', 4: 'a'},  
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}, 
{1: 'a', 2: 'b', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'b', 3: 'a', 4: 'd'}, 
{1: 'a', 2: 'b', 3: 'c', 4: 'a'},  
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}
{1: 'a', 2: 'a', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}, 
{1: 'a', 2: 'b', 3: 'a', 4: 'a'}, 
{1: 'a', 2: 'a', 3: 'c', 4: 'd'}
任何帮助都将不胜感激


谢谢

好的,我刚刚读了我的问题,它看起来很复杂,甚至难以理解。我正在考虑做所有的产品和删除后的特殊情况。除非有人有更好的主意。