我列出了可能的单词来制作给定单词的字谜。每个列表的字符串都是字典的关键,并且具有一个或多个单词的值。哪种是最好的(最快的,pythonic)方法,按照字典中相应键的每个列表中的单词的键的顺序来制作所有可能的句子。 列表中包含可变数量的键。
keylist = ['key1', 'key2', 'key3']
worddict = {'key1': ['a','b','c'], 'key2':['d','e','f'], 'key3':['g','h','i']}
预期结果(第一个键列表中的第一个单词,第二个键列表中的第二个单词,依此类推):
["a d g",
"a d h",
"a d i",
.....
"c f i"]
答案 0 :(得分:6)
使用itertools模块中的product
函数生成迭代的所有组合
import itertools
for sentence in itertools.product(['a','b','c'], ['d','e','f'], ['g','h','i']):
print sentence
输出将是元组,但如果需要,可以很容易地将它们转换为字符串或列表。
答案 1 :(得分:1)
这样的事情有用吗?
import itertools
anagrams = []
for x in itertools.product(*worddict.values()):
anagrams.extend(" ".join(y) for y in itertools.permutations(x))
答案 2 :(得分:0)
鼓励我使用我可以弯曲它们的产品,以便从这样的列表字典中调整可变数量的键:
import itertools
keylist = ['key1', 'key4','key2']
worddict = {'key1': ['a','b','c'],
'key2':['d','e','f'],
'key3':['g','h','i'],
'key4':['j','k','l']}
sentences = (' '.join(sentence)
for sentence in itertools.product(*(worddict[k]
for k in keylist)))
print '\n'.join(sentences)