为数据科学清理Python中的名称列表

2024-09-30 18:15:25 发布

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

因此,我碰巧收到一个xlms文件,其中包含具有不同头衔的个人姓名,如先生、女士、博士、女士、法官等。然而,其中一些姓名在一个姓名中包含多个头衔,例如“Ronderval先生、Ronderval先生”、“Dr Rev Johns先生”等。因此,我试图删除除一个以外的所有姓名,因此,最终结果应该是朗德瓦尔先生或朗德瓦尔夫人、约翰博士或约翰牧师或约翰先生,他们中的任何人都可以。到目前为止,我所做的是将字符串转换成列表,例如 name_list = [['Mr','Mrs', 'Ronderval'], ['Dr', 'Rev','Johns', 'Mr']]并有一个标题列表{}。因此,我尝试遍历名称列表,删除标题中的所有值,结果显然是“Roderval”和“Johns”,但我希望至少有一个标题保留在Ronderval先生或Ronderval夫人、Johns博士或Rev Johns或Mr Johns的名称中。我该怎么办

下面是我使用列表理解的代码

 name_list=[[x for x in l if (x not in title )] for l in name_list] 

Tags: namein标题列表revlist姓名mr
3条回答

您可以在进行姓名列表检查时查找每个条目的标题和名称(任何不是标题的内容)

例如:

name_list = [['Mr','Mrs', 'Ronderval'], ['Dr', 'Rev','Johns', 'Mr']]
title_list = ['Mr', 'Ms', 'Dr', 'Mrs', 'Judge','Rev']

filtered_name_list = []

for one_entry in name_list:
    title, name = None, None

    for name_or_title in one_entry:
        if name_or_title in title_list:
            title = name_or_title
        else:
            name = name_or_title
        if title and name:
            break

    filtered_name_list.append([title, name])

print(filtered_name_list)

输出:

[['Mrs', 'Ronderval'], ['Rev', 'Johns']]

你可能想试试这里的set

result = [[name.intersection(title_list).pop(), name.difference(title_list).pop()] for name in map(set,name_list)]

# output [['Mr', 'Ronderval'], ['Dr', 'Johns']]

这对我很有用:

name_list_all = [['Mr','Mrs', 'Ronderval'], ['Dr', 'Rev','Johns', 'Mr']]
title=['Mr', 'Ms', 'Dr', 'Mrs', 'Judge','Rev']
name_list=[[x for x in l if (x not in title )] for l in name_list_all]
title_list =[[x for x in l if (x  in title )] for l in name_list_all]

[x.append(y[0]) for x,y in zip(name_list,title_list)]
print(name_list)

编辑: 修正码

相关问题 更多 >