Поиск всех предложений из списка ключевых слов для диктовки

1

У меня есть список возможных слов, чтобы сделать анаграмму данных слов. Каждая строка списка является ключом к словарю и имеет значение одного или нескольких слов. Какой лучший (самый быстрый, пифонический) способ сделать все возможные предложения в порядке ключей от слов в каждом списке соответствующих клавиш в словаре. Списки имеют в них переменное количество ключей.

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"]
Теги:
dictionary
combinations
word

3 ответа

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

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

import itertools

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

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

1

Что-то вроде этой работы?

import itertools
anagrams = []
for x in itertools.product(*worddict.values()):
    anagrams.extend(" ".join(y) for y in itertools.permutations(x))
  • 0
    список ключей отсутствует в решении. Список слов содержит более 10000 слов, но в правильной форме анаграммы всего несколько слов. Нахождение анаграммы я полностью оптимизировал, использование перестановок неуместно. Я хочу только порядок списка ключей и только те ключи, которые есть в списке (обычно от 1 до 6 слов).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню