给定一个字符串如“xyz”,我想生成所有形式的字典:
return nil
其中{"x": vx, "y": vy, "z": vz}
,vx
,vy
是1到5之间的整数。
所以在上面的例子中,有125个这样的词典。但字符串可以有不同的长度。
什么是Pythonic方法呢?
答案 0 :(得分:3)
我很肯定这是重复的,但我现在找不到好的,所以我会回答并将其作为社区维基。使用itertools.product
:
>>> from itertools import product
>>> s = "xyz"
>>> [dict(zip(s,v)) for v in product(range(1,6),repeat=len(s))]
[{'y': 1, 'x': 1, 'z': 1}, {'y': 1, 'x': 1, 'z': 2}, {'y': 1, 'x': 1, 'z': 3}, {'y': 1, 'x': 1, 'z': 4}, {'y': 1, 'x': 1, 'z': 5}, {'y': 2, 'x': 1, 'z': 1}, {'y': 2, 'x': 1, 'z': 2}, {'y': 2, 'x': 1, 'z': 3}, {'y': 2, 'x': 1, 'z': 4}, {'y': 2, 'x': 1, 'z': 5}, {'y': 3, 'x': 1, 'z': 1}, {'y': 3, 'x': 1, 'z': 2}, {'y': 3, 'x': 1, 'z': 3}, {'y': 3, 'x': 1, 'z': 4}, {'y': 3, 'x': 1, 'z': 5}, {'y': 4, 'x': 1, 'z': 1}, {'y': 4, 'x': 1, 'z': 2}, {'y': 4, 'x': 1, 'z': 3}, {'y': 4, 'x': 1, 'z': 4}, {'y': 4, 'x': 1, 'z': 5}, {'y': 5, 'x': 1, 'z': 1}, {'y': 5, 'x': 1, 'z': 2}, {'y': 5, 'x': 1, 'z': 3}, {'y': 5, 'x': 1, 'z': 4}, {'y': 5, 'x': 1, 'z': 5}, {'y': 1, 'x': 2, 'z': 1}, {'y': 1, 'x': 2, 'z': 2}, {'y': 1, 'x': 2, 'z': 3}, {'y': 1, 'x': 2, 'z': 4}, {'y': 1, 'x': 2, 'z': 5}, {'y': 2, 'x': 2, 'z': 1}, {'y': 2, 'x': 2, 'z': 2}, {'y': 2, 'x': 2, 'z': 3}, {'y': 2, 'x': 2, 'z': 4}, {'y': 2, 'x': 2, 'z': 5}, {'y': 3, 'x': 2, 'z': 1}, {'y': 3, 'x': 2, 'z': 2}, {'y': 3, 'x': 2, 'z': 3}, {'y': 3, 'x': 2, 'z': 4}, {'y': 3, 'x': 2, 'z': 5}, {'y': 4, 'x': 2, 'z': 1}, {'y': 4, 'x': 2, 'z': 2}, {'y': 4, 'x': 2, 'z': 3}, {'y': 4, 'x': 2, 'z': 4}, {'y': 4, 'x': 2, 'z': 5}, {'y': 5, 'x': 2, 'z': 1}, {'y': 5, 'x': 2, 'z': 2}, {'y': 5, 'x': 2, 'z': 3}, {'y': 5, 'x': 2, 'z': 4}, {'y': 5, 'x': 2, 'z': 5}, {'y': 1, 'x': 3, 'z': 1}, {'y': 1, 'x': 3, 'z': 2}, {'y': 1, 'x': 3, 'z': 3}, {'y': 1, 'x': 3, 'z': 4}, {'y': 1, 'x': 3, 'z': 5}, {'y': 2, 'x': 3, 'z': 1}, {'y': 2, 'x': 3, 'z': 2}, {'y': 2, 'x': 3, 'z': 3}, {'y': 2, 'x': 3, 'z': 4}, {'y': 2, 'x': 3, 'z': 5}, {'y': 3, 'x': 3, 'z': 1}, {'y': 3, 'x': 3, 'z': 2}, {'y': 3, 'x': 3, 'z': 3}, {'y': 3, 'x': 3, 'z': 4}, {'y': 3, 'x': 3, 'z': 5}, {'y': 4, 'x': 3, 'z': 1}, {'y': 4, 'x': 3, 'z': 2}, {'y': 4, 'x': 3, 'z': 3}, {'y': 4, 'x': 3, 'z': 4}, {'y': 4, 'x': 3, 'z': 5}, {'y': 5, 'x': 3, 'z': 1}, {'y': 5, 'x': 3, 'z': 2}, {'y': 5, 'x': 3, 'z': 3}, {'y': 5, 'x': 3, 'z': 4}, {'y': 5, 'x': 3, 'z': 5}, {'y': 1, 'x': 4, 'z': 1}, {'y': 1, 'x': 4, 'z': 2}, {'y': 1, 'x': 4, 'z': 3}, {'y': 1, 'x': 4, 'z': 4}, {'y': 1, 'x': 4, 'z': 5}, {'y': 2, 'x': 4, 'z': 1}, {'y': 2, 'x': 4, 'z': 2}, {'y': 2, 'x': 4, 'z': 3}, {'y': 2, 'x': 4, 'z': 4}, {'y': 2, 'x': 4, 'z': 5}, {'y': 3, 'x': 4, 'z': 1}, {'y': 3, 'x': 4, 'z': 2}, {'y': 3, 'x': 4, 'z': 3}, {'y': 3, 'x': 4, 'z': 4}, {'y': 3, 'x': 4, 'z': 5}, {'y': 4, 'x': 4, 'z': 1}, {'y': 4, 'x': 4, 'z': 2}, {'y': 4, 'x': 4, 'z': 3}, {'y': 4, 'x': 4, 'z': 4}, {'y': 4, 'x': 4, 'z': 5}, {'y': 5, 'x': 4, 'z': 1}, {'y': 5, 'x': 4, 'z': 2}, {'y': 5, 'x': 4, 'z': 3}, {'y': 5, 'x': 4, 'z': 4}, {'y': 5, 'x': 4, 'z': 5}, {'y': 1, 'x': 5, 'z': 1}, {'y': 1, 'x': 5, 'z': 2}, {'y': 1, 'x': 5, 'z': 3}, {'y': 1, 'x': 5, 'z': 4}, {'y': 1, 'x': 5, 'z': 5}, {'y': 2, 'x': 5, 'z': 1}, {'y': 2, 'x': 5, 'z': 2}, {'y': 2, 'x': 5, 'z': 3}, {'y': 2, 'x': 5, 'z': 4}, {'y': 2, 'x': 5, 'z': 5}, {'y': 3, 'x': 5, 'z': 1}, {'y': 3, 'x': 5, 'z': 2}, {'y': 3, 'x': 5, 'z': 3}, {'y': 3, 'x': 5, 'z': 4}, {'y': 3, 'x': 5, 'z': 5}, {'y': 4, 'x': 5, 'z': 1}, {'y': 4, 'x': 5, 'z': 2}, {'y': 4, 'x': 5, 'z': 3}, {'y': 4, 'x': 5, 'z': 4}, {'y': 4, 'x': 5, 'z': 5}, {'y': 5, 'x': 5, 'z': 1}, {'y': 5, 'x': 5, 'z': 2}, {'y': 5, 'x': 5, 'z': 3}, {'y': 5, 'x': 5, 'z': 4}, {'y': 5, 'x': 5, 'z': 5}]
>>> len(_)
125
请注意,我们还没有对字符串的长度进行硬编码。