1

我有可能的单词列表来对给定的单词进行字谜。列表的每个字符串都是字典的键,并且具有一个或多个单词的值。这是从字典中对应键的每个列表中的单词中按键的顺序生成所有可能句子的最佳(最快,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"]
4

3 回答 3

6

使用itertoolsproduct模块中的函数来生成您的可迭代对象的所有组合

import itertools

for sentence in itertools.product(['a','b','c'], ['d','e','f'], ['g','h','i']):
    print sentence

输出将是元组,但如果需要,这些可以很容易地转换为字符串或列表。

于 2010-08-19T21:38:47.760 回答
1

这样的事情有用吗?

import itertools
anagrams = []
for x in itertools.product(*worddict.values()):
    anagrams.extend(" ".join(y) for y in itertools.permutations(x))
于 2010-08-19T21:37:46.590 回答
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)
于 2010-08-19T22:35:42.733 回答