Объединить подсписки по одинаковым элементам
Есть вывод списка:
[
['Сергей', '+71234567890'],
['Сергей', '+71234567810'],
['Михаил', '+51234567890'],
['Николай', '+72134567890']
]
как сделать так? чтобы было так?
[
['Сергей', ['+71234567890','+71234567810'],
['Михаил', '+51234567890'],
['Николай', '+72134567890']
]
т.е. у кого одинаковые имена и несколько телефонов, создавался вложенный список ?
Ответы (2 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
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)