Python. Удаление дублей в двумерном массиве
Имеется массив из которого нужно удалить строки с одинаковыми uuid, я попробовал создать новый массив и добавлять в него только новые которых еще нет в новом массиве но что то пошло не по плану
arr = [['-1', '2021-04-23 23:01:47,656', 'f036fa57-3b83-4d56-889f-e1a02b052d3b'],
['2', '2021-04-23 22:54:28,527', 'ac09eb08-07cc-42d9-9656-7f6160adfe18'],
['-1', '2021-04-23 22:51:18,321', '337936c0-df17-45e8-aebc-2ea7ad09dfba'],
['1', '2021-04-23 22:51:17,232', '337936c0-df17-45e8-aebc-2ea7ad09dfba'],
['1', '2021-04-23 22:48:50,076', 'c228295a-cade-467c-961e-e81b33f98fcd']]
newarr = ['','','']
for i in arr:
if i[2] not in newarr:
newarr.append(i)
for j in newarr:
print(j)
Вывод
['-1', '2021-04-23 23:01:47,656', 'f036fa57-3b83-4d56-889f-e1a02b052d3b']
['2', '2021-04-23 22:54:28,527', 'ac09eb08-07cc-42d9-9656-7f6160adfe18']
['-1', '2021-04-23 22:51:18,321', '337936c0-df17-45e8-aebc-2ea7ad09dfba']
['1', '2021-04-23 22:51:17,232', '337936c0-df17-45e8-aebc-2ea7ad09dfba']
['1', '2021-04-23 22:48:50,076', 'c228295a-cade-467c-961e-e81b33f98fcd']
Что я делаю ни так?
Ответы (4 шт):
Можно так, например:
arr = [
['-1', '2021-04-23 23:01:47,656', 'f036fa57-3b83-4d56-889f-e1a02b052d3b'],
['2', '2021-04-23 22:54:28,527', 'ac09eb08-07cc-42d9-9656-7f6160adfe18'],
['-1', '2021-04-23 22:51:18,321', '337936c0-df17-45e8-aebc-2ea7ad09dfba'],
['1', '2021-04-23 22:51:17,232', '337936c0-df17-45e8-aebc-2ea7ad09dfba'],
['1', '2021-04-23 22:48:50,076', 'c228295a-cade-467c-961e-e81b33f98fcd'],
]
added = set()
new_arr = []
for el in arr:
if el[2] not in added:
new_arr.append(el)
added.add(el[2])
print(*new_arr, sep='\n')
Что не так: ты проверяешь наличие одного элемента вложенного списка в списке списков. Образно говоря, не равняется ли буква "и" слову "питон". Нет, не равняется, хоть слово "питон"и содержит букву "и".
Из массива надо удалить все строки с одинаковым третьим элементом ('uuid')? Или одну строку оставить? Если одну оставить, то какую? Если любую, то это можно решить так:
- создаём словарь, в качестве keys которого используем 'uuid', таким образом отфильтровываются повторы 'uuid'
- конвертируем values словаря обратно в list
new_dict = {x[2]:x for x in arr}
new_arr = list(new_dict.values())
arr = [
['-1', '2021-04-23 23:01:47,656', 'f036fa57-3b83-4d56-889f-e1a02b052d3b'],
['2', '2021-04-23 22:54:28,527', 'ac09eb08-07cc-42d9-9656-7f6160adfe18'],
['-1', '2021-04-23 22:51:18,321', '337936c0-df17-45e8-aebc-2ea7ad09dfba'],
['1', '2021-04-23 22:51:17,232', '337936c0-df17-45e8-aebc-2ea7ad09dfba'],
['1', '2021-04-23 22:48:50,076', 'c228295a-cade-467c-961e-e81b33f98fcd'],
]
uuids = [] # тут будет список уникальных идентификаторов
result = [] # тут будет результат
for row in arr:
if row[2] not in uuids: # проверяем, нет ли в списке идентификатора
result.append(row) # добавляем в результат всю строку
uuids.append(row[2]) # в список добавляем только(!) идентификатор
[print(row) for row in result] # вывод результата
ошибка была в том, что идентификатор искался в списке строк тут:
if el[2]/* это строка */ not in added /* а это список списков(!) */
поэтому условие всегда выполнялось - строка среди списков не находилась никак