我可以获取 Python 来比较昵称列表和全名列表吗?

Can I get Python to compare a list of nicknames with a list of full names?

所以首先我有一个字符数据框,其中有一个名为 name 的列,其中包含 100 多个人的全名。

例如,姓名:Johnathan Jay Smith、Harold Robert Doe、Katie Holt。

然后我有一个独特昵称的列表,例如,[先生。 Doe、Katie 阿姨、John]

需要注意的是,它们的顺序并不相同,并不是所有有昵称的人都在全名列表中,也不是全名列表中的每个人都在昵称列表中。我将删除最后没有匹配值的行。

我的问题:有没有办法让我 python 逐项阅读这 2 个列表,并为匹配的每个人匹配 John 和 Johnathan Jay Smith?基本上,如果昵称作为全名的一部分出现,我是否可以将昵称列添加到我现有的角色数据框中,而无需为超过 100 个人手动执行此操作?

提前谢谢你,我什至不知道从哪里开始这个!

这非常简单,没有考虑拼写变体

from itertools import product

names = ['Johnathan Jay Smith', 'Harold Robert Doe', 'Katie Holt']
nicknames = ["Mr. Doe", "Aunt Katie", "John"]

def match_nicknames(names, nicknames):
    splitted_names = [n.split(' ') for n in names]
    splitted_nn = [n.split(' ') for n in nicknames]
    matches = []
    for name in splitted_names:
        name_pairs = product(name, splitted_nn)
        matched = filter(lambda x: any([nn in x[0] for nn in x[1]]), name_pairs)
        if matched:
            matches += [(" ".join(name), " ".join(nn)) for name_part, nn in matched]
    return matches

match_nicknames(names, nicknames)
>> [('Johnathan Jay Smith', 'John'),
    ('Harold Robert Doe', 'Mr. Doe'),
    ('Katie Holt', 'Aunt Katie')]