如何将字符串拆分为特定组?

时间:2017-06-02 18:18:43

标签: python python-2.7 parsing

我有一个从SQL查询中获取的名称列表。它们的形式如下:

[('Lastname Firtsname Middlename',), ('Lastname Firstname',)]. 

我很难解析名字。我希望他们的形式是:

Firstname Middlename Lastname , Firstname Lastname

有人可以告诉我最好的方法吗?

4 个答案:

答案 0 :(得分:1)

假设输出格式为

output = [('Lastname Firstname Middlename'), ('Lastname Firstname')]

然后

last_first_middle = output[0].split()
last_first = output[1].split()

parsed_output = [('{} {} {}').format(last_first_middle[1], last_first_middle[2], last_first_middle[0]), ('{} {}').format(last_first[1], last_first[0])]

给出输出

['Firstname Middlename Lastname', 'Firstname Lastname']

答案 1 :(得分:1)

您可以split list并先index tuplessplit,然后将其附加到另一个list。之后,您可以loop浏览新列表并根据需要打印值。例如:

data = [('Lastname Firtsname Middlename',), ('Lastname Firstname',)]
first = [data[0][0].split()]
second = [data[1][0].split()]
for x, y in zip(first, second):
    print x[1], x[2], x[0] + ' , ' + y[1], y[0]

输出:

Firtsname Middlename Lastname , Firstname Lastname

答案 2 :(得分:1)

所以我们实际上在元组和列表结构中的2个字符串中有5个单词。

要访问每个单词,我们需要了解结构以及如何访问它们。

列表访问非常简单:item[0]item[1]

现在,item[0]将包含一个元组。要访问此元组,我们需要另一个索引。因此item[0][0]将包含我们的3个字符串,item[1][0]将包含我们的2个字符串。

现在我们只需要拆分字符串。 item[0][0].split()会为我们提供一个包含3个条目的列表:['Lastname', 'Firtsname', 'Middlename']item[1][0].split()会向我们提供一个包含2个条目的列表:['Lastname', 'Firstname']

最后,我们需要创建输出字符串。我们需要做的就是按照我们希望访问字符串的顺序访问我们的2个字符串。

我会抛出下面的第一个密码,让您的内容更有效率

def FirstPass(input):
    name_3part = input[0][0].split()
    name_2part = input[1][0].split()
    output_part1 = ' '.join(name_3part[1], name_3part[2], name_3part[0])
    output_part2 = ' '.join(name_2part[1], name_2part[0])
    output = ', '.join(output_part1, output_part2)
    return output

您可以根据需要创建循环结构和条件输出,但是对于您所请求输出的输入,这个简单易懂的强力代码可能比更具想象力的示例更好。

答案 3 :(得分:0)

迭代列表,拆分每个元组项0(即每个元组中唯一的项)并对其进行索引。此函数在first-middle-last中返回list个名称。如果需要修改。

names = [('Lastname Firtsname Middlename',), ('Lastname Firstname',)]

def formatnames(names):
    new_names = []
    for name in names:
        n = name[0].split()
        new_names.append('{} {}'.format(' '.join(n[1:]),n[0]))
    return new_names

formatnames(names)

返回:

['Firtsname Middlename Lastname', 'Firstname Lastname']

要返回所有名称的单个字符串,请更改return语句:

return ' , '.join(new_names)

返回:

'Firtsname Middlename Lastname , Firstname Lastname'

要将输出保留为list tuple,请更改new_names.append声明:

new_names.append(('{} {}'.format(' '.join(n[1:]),n[0]),))

返回:

[('Firtsname Middlename Lastname',), ('Firstname Lastname',)]