data = []
for i in range(1000):
data.append([f'Antônio{i}', '01/01/2020', 'Faltou'])
data.append([f'Antônio{i}', '15/01/2020', 'Remarcou'])
data.append([f'Fulano{i}', '15/01/2020', 'Faltou'])
data.append([f'Fulano{i}', '20/01/2020', 'Remarcou'])
data.append([f'Beltrano{i}', '15/01/2020', 'Faltou'])
data.append([f'Beltrano{i}', '02/02/2020', 'Faltou'])
data.append([f'Beltrano{i}', '10/11/2021', 'Compareceu'])
from timeit import timeit
def com_listas():
resultado = []
for i in data:
nomes = [n[0] for n in resultado]
if i[0] not in nomes:
resultado.append([i[0], i[1], i[2]])
else:
for j in resultado:
if i[0] == j[0]:
j.append(i[1])
j.append(i[2])
def com_dicionario():
resultado = {}
for nome, dt, acao in data:
resultado.setdefault(nome, [nome]).extend([dt, acao])
resultado = list(resultado.values())
# executa 1 vez cada teste
params = { 'number' : 1, 'globals': globals() }
# imprime os tempos em segundos
print(timeit('com_listas()', **params))
print(timeit('com_dicionario()', **params))
ZGF0YSA9IFtdCmZvciBpIGluIHJhbmdlKDEwMDApOgogICAgZGF0YS5hcHBlbmQoW2YnQW50w7RuaW97aX0nLCAnMDEvMDEvMjAyMCcsICdGYWx0b3UnXSkKICAgIGRhdGEuYXBwZW5kKFtmJ0FudMO0bmlve2l9JywgJzE1LzAxLzIwMjAnLCAnUmVtYXJjb3UnXSkKICAgIGRhdGEuYXBwZW5kKFtmJ0Z1bGFub3tpfScsICcxNS8wMS8yMDIwJywgJ0ZhbHRvdSddKQogICAgZGF0YS5hcHBlbmQoW2YnRnVsYW5ve2l9JywgJzIwLzAxLzIwMjAnLCAnUmVtYXJjb3UnXSkKICAgIGRhdGEuYXBwZW5kKFtmJ0JlbHRyYW5ve2l9JywgJzE1LzAxLzIwMjAnLCAnRmFsdG91J10pCiAgICBkYXRhLmFwcGVuZChbZidCZWx0cmFub3tpfScsICcwMi8wMi8yMDIwJywgJ0ZhbHRvdSddKQogICAgZGF0YS5hcHBlbmQoW2YnQmVsdHJhbm97aX0nLCAnMTAvMTEvMjAyMScsICdDb21wYXJlY2V1J10pCgoKZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdAoKZGVmIGNvbV9saXN0YXMoKToKICAgIHJlc3VsdGFkbyA9IFtdCiAgICBmb3IgaSBpbiBkYXRhOgogICAgICAgIG5vbWVzID0gW25bMF0gZm9yIG4gaW4gcmVzdWx0YWRvXQogICAgICAgIGlmIGlbMF0gbm90IGluIG5vbWVzOgogICAgICAgICAgICByZXN1bHRhZG8uYXBwZW5kKFtpWzBdLCBpWzFdLCBpWzJdXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgaiBpbiByZXN1bHRhZG86CiAgICAgICAgICAgICAgICBpZiBpWzBdID09IGpbMF06CiAgICAgICAgICAgICAgICAgICAgai5hcHBlbmQoaVsxXSkKICAgICAgICAgICAgICAgICAgICBqLmFwcGVuZChpWzJdKQoKZGVmIGNvbV9kaWNpb25hcmlvKCk6CiAgICByZXN1bHRhZG8gPSB7fQogICAgZm9yIG5vbWUsIGR0LCBhY2FvIGluIGRhdGE6CiAgICAgICAgcmVzdWx0YWRvLnNldGRlZmF1bHQobm9tZSwgW25vbWVdKS5leHRlbmQoW2R0LCBhY2FvXSkKICAgIHJlc3VsdGFkbyA9IGxpc3QocmVzdWx0YWRvLnZhbHVlcygpKQoKCiMgZXhlY3V0YSAxIHZleiBjYWRhIHRlc3RlCnBhcmFtcyA9IHsgJ251bWJlcicgOiAxLCAnZ2xvYmFscyc6IGdsb2JhbHMoKSB9CiMgaW1wcmltZSBvcyB0ZW1wb3MgZW0gc2VndW5kb3MKcHJpbnQodGltZWl0KCdjb21fbGlzdGFzKCknLCAqKnBhcmFtcykpCnByaW50KHRpbWVpdCgnY29tX2RpY2lvbmFyaW8oKScsICoqcGFyYW1zKSkK