извлечение значений кортежей из списка кортежей

#python #list #python-3.x #tuples

#python #Список #python-3.x #кортежи

Вопрос:

У меня есть список, содержащий кортежи разных типов, например:

 [(0, 1, 'BLANK', ''), (0, 2, 'PERSON', 'Deraj'), (3, 8, 'DOB', 'April 27 , 1834'), (9, 11, 'PERSON', 'David Deraj'), (11, 13, 'LOC', 'Pennsylvania'), (16, 19, 'PERSON', 'Mary Deraj')]
  

Как мне получить следующий вывод

 ('Deraj', 'David Deraj')
('Deraj', 'Mary Deraj')
  

я пытаюсь использовать цикл for:

 for i in l:
    if i[2] == 'PERSON':
        m = list(i[3])
  

но это не работает.

Комментарии:

1. (x [1] [3], x[3] [3]) и (x [1] [3], x [5] [3]) должны делать..

Ответ №1:

Вероятно, вы можете сделать это следующим образом (если я правильно понимаю, и вы хотите, чтобы первый член кортежа был вторым именем этих людей):

 l=[]
for i in l:
  if i[2]=='PERSON':
      temp=i[3].split()
      if len(temp)>1: 
        l.append((temp[1],i[3]))
  

Ответ №2:

Предполагая, что первая запись (0, 2, 'PERSON', 'Deraj') всегда содержит первый нулевой элемент, а второй элемент указывает количество членов семейства, вы можете сделать это в одной строке.

 print [ (entry[3].split()[1], entry[3])
        for entry in data
        if (entry[2] == 'PERSON' and entry[0] > 0) ]