Рассмотрите возможность создания «нормализованного» словаря, в котором значения - это слова из master
, а ключи - их уникальные представления, такие как отсортированные наборы подслов. Если все подслов в слове всегда разные, вместо него можно использовать frozenset
.
def normalize(word):
return tuple(sorted(word.split()))
# return frozenset(word.split())
normalized = {normalize(m) : m for m in master}
#{('1.2', 'abc', 'px'): 'abc 1.2 px',
# ('5.4', 'pqr', 'tr'): 'pqr 5.4 tr',
# ('1.8', 'cmq'): '1.8 cmq', ('2.5', 'pst'): 'pst 2.5'}
Теперь вы можете преобразовать каждое слово в l1
в нормализованную форму и найти его в словаре:
[normalized.get(normalize(m), m) for m in l1]
#['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', '1.8 cmq', 'pst 2.5', 'abc 1.2 px']
Обратите внимание, что если слово отсутствует в master
, его удобно оставить без изменений.