在列表中将姓氏,名字的顺序切换为名字 姓氏

4

我有两个运动员列表。其中一个结构简单:

['Lastname, Firstname', 'Lastname2, Firstname2'..]

第二个是一个结构化的嵌套列表:
[['Firstname Lastname', 'Team', 'Position', 'Ranking']...]

我最终希望能够搜索第二个列表的内容,并在第一个列表中有匹配的姓名时提取信息。
我需要将“姓,名”交换为“名 姓”,以匹配第二个列表的格式,以简化操作。
任何帮助都将不胜感激。谢谢!

我不清楚 - 你想知道如何根据另一个列表提取信息,还是只想更改格式? - David Robinson
我只想改变格式以匹配。想到如果更改第一个列表的格式会更简单,因为它是一个仅包含字符串(名称)的简单列表,而不像另一个列表那样是列表的列表。你下面的答案完美解决了这个问题。谢谢! - tim roberts
1个回答

9

您可以使用以下方法在名称列表中交换顺序:

[" ".join(n.split(", ")[::-1]) for n in namelist]

一个解释:这是一个对每个条目执行某些操作的列表推导式。以下是一些中间版本及其返回值:
namelist = ["Robinson, David", "Roberts, Tim"]
# split each item into a list, around the commas:
[n.split(", ") for n in namelist]
# [['Robinson', 'David'], ['Roberts', 'Tim']]

# reverse the split up list:
[n.split(", ")[::-1] for n in namelist]
# [['David', 'Robinson'], ['Tim', 'Roberts']]

# join it back together with a space:
[" ".join(n.split(", ")[::-1]) for n in namelist]
# ['David Robinson', 'Tim Roberts']

太棒了!非常顺利地完成了。可以简要解释一下发生了什么吗?谢谢! - tim roberts
2
n.split(", ")[::-1] 更清晰地写作 reversed(n.split(", ")) - Steven Rumbalski
为了使逗号后的空格变成可选项,并允许在单词前后添加空格,我会使用[" ".join(n.replace(","," ").split()[::-1]) for n in namelist] - martineau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接