2010-08-19 40 views
1

我有可能的话列表,以给定的话字谜。列表中的每个字符串都是字典的关键字,并且具有一个或多个单词的值。根据字典中相应键的每个列表中的词的顺序,按照键的顺序制作所有可能的句子是最好的(最快,pythonic)方式。 列表中有可变数量的键。从查找关键字列表中的所有句子与dict

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

鼓励的产品猴子,我可以弯曲他们从列表的字典适应可变数字键的是这样的:

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) 
1

请问像这样的工作?

import itertools 
anagrams = [] 
for x in itertools.product(*worddict.values()): 
    anagrams.extend(" ".join(y) for y in itertools.permutations(x)) 
+0

键列表从溶液中下落不明。单词表包含超过10000个单词,但正确的单词形式只有几个单词。 Anagram发现我已经完全优化,使用排列是不恰当的。我只想要键列表顺序,只需要列表中的键(通常为1到6个字)。 – 2010-08-19 22:33:20

6

使用product功能itertools模块中产生的iterables

import itertools 

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

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