Объединить подсписки по одинаковым элементам

Есть вывод списка:

[
    ['Сергей', '+71234567890'],
    ['Сергей', '+71234567810'],
    ['Михаил', '+51234567890'],
    ['Николай', '+72134567890']
]

как сделать так? чтобы было так?

[
    ['Сергей', ['+71234567890','+71234567810'],
    ['Михаил', '+51234567890'],
    ['Николай', '+72134567890']
]

т.е. у кого одинаковые имена и несколько телефонов, создавался вложенный список ?


Ответы (2 шт):

Автор решения: Stanislav Volodarskiy

C dict.setdefault:

source = [
    ['Сергей', '+71234567890'],
    ['Сергей', '+71234567810'],
    ['Михаил', '+51234567890'],
    ['Николай', '+72134567890']
]

d = {}
for k, v in source:
    d.setdefault(k, []).append(v)
target = list(map(list, d.items()))

print(target)
[['Сергей', ['+71234567890', '+71234567810']], ['Михаил', ['+51234567890']], ['Николай', ['+72134567890']]]

Без оного:

source = [
    ['Сергей', '+71234567890'],
    ['Сергей', '+71234567810'],
    ['Михаил', '+51234567890'],
    ['Николай', '+72134567890']
]

d = {}
for k, v in source:
    if k not in d:
        d[k] = []
    d[k].append(v)

target = list(map(list, d.items()))

print(target)
→ Ссылка
Автор решения: Alexey Sinitsky

да все сделал, вот полный код получился..

lst = ['+71234567890 Сергей', '+71234567810 Сергей', '+51234567890 Михаил', '+72134567890 Николай']


lst_in = []

for x in lst:
    A = [x.split() for x in lst]
print(A)

for x in A:
    x[0], x[1] = x[1],x[0]
    print(x)
    lst_in.append(x)

print(lst_in)

d={}

for i, v in lst_in:
   if i not in d:
       d[i] = []
   d[i].append(v)

print(d)

→ Ссылка