У меня есть список имен, и я пытаюсь извлечь имя и фамилию из списка в Python - PullRequest
0 голосов
/ 24 апреля 2018

Ниже приведен код, над которым я работаю, я не могу извлечь имена и фамилии из списка имен. Код продолжает давать мне ошибку, слишком много значений для распаковки может быть, потому что, например, это имя ELSWOCK Рик младший имеет имя, отчество и фамилию. Здесь Рик-младший должен быть именем, а Элсвок - фамилией.

names=[' HE XF, Wei W, Liu ZZ, Shen XL',' STARK LE, AARON FIN, LEO DE CAP, ADAM FORTH, KARAN SINGH',' ELSWICK RICK Jr, ASTO FON, SAM MARLON, KIM ZENG']
names1 = []
for l1 in names:
    names1.append(l1.split(',')) #To split the line based on commas
first_names=[]
last_names=[]
for line in names1:
    last,first= line[0][:].split()
    first_names.append(first)
    last_names.append(last)

Результатов этой ошибки:

Traceback (последний последний вызов):
Файл "", строка 10, в last, first = строка [0] [:]. split ()

ValueError: слишком много значений для распаковки (ожидается 2)

Результат, который я ожидаю, будет таким:

first_names=[ 'XF, W, ZZ, XL', 'LE, FIN, CAP, FORTH, SINGH', 'RICK Jr, FON, MARLON, ZENG' ]
last_names=[' HE, Wei, Liu, Shen',' STARK, AARON, LEO DE, ADAM, KARAN',' ELSWICK, ASTO, SAM, KIM']

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы можете попробовать это тоже

names=[' HE XF, Wei W, Liu ZZ, Shen XL',' STARK LE, AARON FIN, LEO DE CAP, ADAM FORTH, KARAN SINGH',' ELSWICK RICK Jr, ASTO FON, SAM MARLON, KIM ZENG']
reg1=re.compile(r"\w+(?<!,)\s(?=(?!Jr)[\w ]+,?)")
reg2=re.compile(r'(?<!,)\s(?:(?!Jr|DE)[\w ]+(?=,?))')
first_names=[reg1.sub("",m.strip()) for m in names]
last_names=[reg2.sub("",m.strip()) for m in names]
print("{}\n{}".format(first_names,last_names))

Вывод

['XF, W, ZZ, XL', 'LE, FIN, CAP, FORTH, SINGH', 'RICK Jr, FON, MARLON, ZENG']
['HE, Wei, Liu, Shen', 'STARK, AARON, LEO DE, ADAM, KARAN', 'ELSWICK, ASTO, SAM, KIM']
0 голосов
/ 24 апреля 2018

Отредактировано в соответствии с требованиями формата OP:

names=[' HE XF, Wei W, Liu ZZ, Shen XL',' STARK LE, AARON FIN, LEO DE CAP, ADAM FORTH, KARAN SINGH',' ELSWICK RICK Jr, ASTO FON, SAM MARLON, KIM ZENG']
names1 = []
for l1 in names:
    names1.append(l1.split(','))
first_names=[]
last_names=[]

for sub_list in names1:
  temp_sub_firsts ="" 
  temp_sub_lasts ="" 
  for full_name in sub_list:
    full_name_split = full_name.split(' ')
    full_name_split.pop(0)
    temp_sub_lasts += full_name_split.pop(0)
    if full_name != sub_list[-1]:
      temp_sub_lasts += ', '
    temp_first = ""
    for sub_first in full_name_split:
      temp_first += sub_first + ' '
    temp_sub_firsts += temp_first
    if full_name != sub_list[-1]:
      temp_sub_firsts += ', '
  first_names.append(temp_sub_firsts)
  last_names.append(temp_sub_lasts)
print(first_names)
print(last_names)

Выходы:

first_names[]=

['XF , W , ZZ , XL ', 'LE , FIN , DE CAP , FORTH , SINGH ', 'RICK Jr , FON , MARLON , ZENG ']

last_names[]=

['HE, Wei, Liu, Shen', 'STARK, AARON, LEO, ADAM, KARAN', 'ELSWICK, ASTO, SAM, KIM']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...