从包含匹配单词的主列表生成列表,而不考虑顺序

2024-05-23 18:56:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个列表,我们称之为主列表

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,这将采取的名称从主人那里所有的话,无论顺序。例如,修改后的列表

l2=['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', '1.8 cmq', 'pst 2.5','abc 1.2 px']

如何使用python实现这一点?你知道吗


Tags: master名称l1列表顺序tr主人abc
1条回答
网友
1楼 · 发布于 2024-05-23 18:56:22

考虑创建一个“规范化”字典,其中值是来自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中,则可以方便地保持不变。你知道吗

相关问题 更多 >