我可以获取 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')]
所以首先我有一个字符数据框,其中有一个名为 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')]