Задать вопрос
@barboskin93

Как объединить элементы списка, убрав дубликаты?

Подскажите, пожалуйста. Как объединить элементы списка (тоже списки), убрав дубликаты. Есть список вида:
a = [['Петров', 'Петр', 'Петрович', 'Стационар', '', '+7(888)888-88-88 ', ''],
['Иванов','Иван','Иванович','Поликлиника',
'','+7(777)777-77-77 доб.0000',''],
['Петров','Петр','Петрович','Стационар','Хирург','','',''],
['Иванов', 'Иван', '', '', '', 'Ivan.Ivanov@mail.ru']]

хочу объединить данные по каждому человеку, что бы тоже остался список списков :
b = [['Петров','Петр','Петрович','Стационар','Хирург','+7(888)888-88-88 ','',''],
['Иванов','Иван','Иванович','Поликлиника','','+7(777)777-77-77 доб.0000','Ivan.Ivanov@mail.ru']]

Так понимаю надо использовать цикл и по условию убирать повторы как-то. Получилось пока просто убрать повторы и записать в список просто подряд каждый элемент. ..
  • Вопрос задан
  • 583 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
aRegius
@aRegius
Python Enthusiast
from collections import defaultdict

data = defaultdict(list)

for info in your_list:
	  key = tuple(info[:2])
	  for item in info:
		    if item not in data[key]:
			      data[key].append(item)

new_list = list(data.values())
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@agent_2203
Не совсем понял что именно надо, объединить элементы списка ? Если да, то можно вот так

for b_ in b:
    string = ""
    for i in b_:
        string = string + i + " "
    print(string)


Вывод:

Петров Петр Петрович Стационар Хирург +7(888)888-88-88    
Иванов Иван Иванович Поликлиника  +7(777)777-77-77 доб.0000 Ivan.Ivanov@mail.ru
Ответ написан
Wispik
@Wispik
from itertools import groupby, chain
from collections import OrderedDict

a = [['Петров', 'Петр', 'Петрович', 'Стационар', '', '+7(888)888-88-88 ', ''],
['Иванов','Иван','Иванович','Поликлиника',
'','+7(777)777-77-77 доб.0000',''],
['Иванов', 'Андрей', '', '',''],
['Петров','Петр','Петрович','Стационар','Хирург','','',''],
['Иванов', 'Иван', '', '', '', 'Ivan.Ivanov@mail.ru']]

a.sort(key=lambda x: (x[0], x[1]))

grouped_list = [list(data) for _, data in groupby(a, key=lambda x: (x[0], x[1]))]

res = [list(OrderedDict.fromkeys(chain(*x))) for x in grouped_list]

Как-то так, объединение по первым двум полям(имени и фамилии)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы