我已经创建了一个列表,我们称之为主列表
master=['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', 'pst 2.5']
现在我有另一个列表,如
l1=['1.2 abc px', 'pqr tr 5.4', 'cmq 1.8', '1.8 cmq', '2.5 pst', 'abc 1.2 px']
我想修改l1,它将取自master的名称,其中显示所有单词,而与顺序无关。例如,修改后的列表将是
l2=['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', '1.8 cmq', 'pst 2.5','abc 1.2 px']
如何使用python做到这一点?
答案 0 :(得分:2)
请考虑创建一个“规范化”字典,其中的值是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
中,则方便地保持不变。