Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建包含所有字典组合的列表,其中键只显示一次_Python_Itertools - Fatal编程技术网

Python 创建包含所有字典组合的列表,其中键只显示一次

Python 创建包含所有字典组合的列表,其中键只显示一次,python,itertools,Python,Itertools,我用itertools尝试了不同的方法,但就是想不出来 我需要找到不同的字典组合: letters = ['a','b','c'] combinations = [] for i in range(3): for t in letters: one_combi = {str(t):i} combinations.append(one_combi) 现在有一个字典列表{字母:数字} 现在我需要创建一个组合列表,其中键(字母)只出现一次 预期输出如下所示:

我用itertools尝试了不同的方法,但就是想不出来

我需要找到不同的字典组合:

letters = ['a','b','c']

combinations = []
for i in range(3):
    for t in letters:
        one_combi = {str(t):i}
        combinations.append(one_combi)
现在有一个字典列表{字母:数字} 现在我需要创建一个组合列表,其中键(字母)只出现一次

预期输出如下所示:

[{'a':0,'b':0,'c':0},
{'a':1,'b':0,'c':0},
{'a':1,'b':1,'c':0},
{'a':1,'b':1,'c':1},
{'a':2,'b':0,'c':0},
...
{'a':2,'b':2,'c':2}]

如果有人能在这件事上帮我,那就太好了

您可以从从输入长度派生的范围生成所有整数组合,然后使用
zip

letters = ['a','b','c']
def combos(d, c = []):
  if len(c) == len(d):
     yield dict(zip(letters, c))
  else:
     for i in d:
        yield from combos(d, c+[i])

print(list(combos(range(len(letters))))
输出:

[{'a': 0, 'b': 0, 'c': 0}, 
{'a': 0, 'b': 0, 'c': 1}, 
{'a': 0, 'b': 0, 'c': 2}, 
{'a': 0, 'b': 1, 'c': 0}, 
{'a': 0, 'b': 1, 'c': 1}, 
...
{'a': 2, 'b': 2, 'c': 2}]
[{'a': 0, 'b': 0, 'c': 0},
{'a': 0, 'b': 0, 'c': 1},
{'a': 0, 'b': 0, 'c': 2},
{'a': 0, 'b':1, 'c': 0},
{'a': 0, 'b': 1, 'c': 1},
{'a': 0, 'b': 1, 'c': 2},
{'a': 0, 'b': 2, 'c': 0},
{'a': 0, 'b': 2, 'c': 1},...

你要找的是

输出:

[{'a': 0, 'b': 0, 'c': 0}, 
{'a': 0, 'b': 0, 'c': 1}, 
{'a': 0, 'b': 0, 'c': 2}, 
{'a': 0, 'b': 1, 'c': 0}, 
{'a': 0, 'b': 1, 'c': 1}, 
...
{'a': 2, 'b': 2, 'c': 2}]
[{'a': 0, 'b': 0, 'c': 0},
{'a': 0, 'b': 0, 'c': 1},
{'a': 0, 'b': 0, 'c': 2},
{'a': 0, 'b':1, 'c': 0},
{'a': 0, 'b': 1, 'c': 1},
{'a': 0, 'b': 1, 'c': 2},
{'a': 0, 'b': 2, 'c': 0},
{'a': 0, 'b': 2, 'c': 1},...
更新

我们可以使用列表理解将所有内容压缩成一行

letters = ['a','b','c']
lst = [dict(zip(letters, x)) for x in product(range(len(letters)), repeat=len(letters))]
print(lst)

甚至可以把它列成一个清单,嗯?看起来不错!有没有一种方法可以使用a、b、c的列表?事实上,我还有很多钥匙要组合。谢谢你的回答!。为了提高效率,进行了一次后续行动。是否可以使用dict而不是列表,并将产品中的范围设置为最大值?那么{'a':2,'b':6,'c':4},在组合中,'a'不会高于2,'b'等于6?