Поиск всех предложений из списка ключевых слов для диктовки - PullRequest
1 голос
/ 20 августа 2010

У меня есть список возможных слов, чтобы составить анаграмму данных слов. Каждая строка списка является ключом к словарю и имеет значение одного или нескольких слов. Какой самый лучший (самый быстрый, 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"]

Ответы [ 3 ]

6 голосов
/ 20 августа 2010

Используйте функцию product в модуле itertools для создания всех комбинаций ваших итераций

import itertools

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

Выходные данные будут кортежами, но их можно легко преобразовать в строкисписки при необходимости.

1 голос
/ 20 августа 2010

Работает ли что-то подобное?

import itertools
anagrams = []
for x in itertools.product(*worddict.values()):
    anagrams.extend(" ".join(y) for y in itertools.permutations(x))
0 голосов
/ 20 августа 2010

Воодушевленный продуктами, я могу согнуть их, чтобы адаптировать переменное количество ключей из словаря списков, например:

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