Python 创建包含所有字典组合的列表,其中键只显示一次
我用itertools尝试了不同的方法,但就是想不出来 我需要找到不同的字典组合: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) 现在有一个字典列表{字母:数字} 现在我需要创建一个组合列表,其中键(字母)只出现一次 预期输出如下所示:
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?