从python中使用名称的字符串中提取姓氏

时间:2013-04-18 17:49:42

标签: python split

我有一个字符串,其名称以“和”字样分隔,以两种形式输入:“First Last”或“Last,First”。我想生成一个列表,其中只有按字母顺序排序的姓氏。 我是Python的新手,所以我想知道是否有更短或更好的方式来做我做过的事情:

names = 'John Foo and Baz, Mike Tom and Bar Foo, S. P.' 
authors  = [ i.strip() for i in names.split("and") ]
comma = [ i.split(',')[0] for i in [i for i in authors if "," in i] ]
nocomma = [ i.split()[-1] for i in [i for i in authors if not "," in i] ]
surnames = comma + nocomma
surnames.sort()
print surnames

1 个答案:

答案 0 :(得分:1)

事实上,您可以改进一些事项:

  • 您应该按' and '拆分,以避免拆分包含字母and的名称(这样就不再需要trim
  • 不需要两个列表推导中的双for循环
  • 如果您将if移到列表理解的左侧,则只需要其中一个

最后,如果您愿意,可以将整个事情放在一个稍微长一点的列表理解中:

surnames = sorted(i.split(",")[0] if "," in i else i.split()[-1]
                  for i in names.split(" and "))

但是,请注意,只有使用逗号分隔的样式编写具有多个姓氏的人员时,这仍然有效。