Идея моего кода заключается в том, что при дублировании одного и того же пользователя с тем же идентификатором device_id он обновляет список (в моем случае создает новый список) и удаляет дублирующиеся записи.
Также он возьмет последние id1, id2 и id3 из дублирующейся записи и объединит их в одну запись в новом списке, а также обновит тип с типом дублирования.
Чтобы объяснить это, приведу пример с 4 списками (напечатанными до обновления и после обновления списка)
Мой код работает, однако у меня есть другие списки с примерно 800k списками, где я пытался запустить код, и он работал в течение часа. Как мне лучше подойти к этому вопросу? (невозможно изменить тип ввода, так как это из другого вызова API, я могу только изменить свой код удаления дублирования)
my_list = []
# [device_id, location, type, name, ph, addr, email, id1, id2, id3]
val1= ['12345653', 'SOUTH', 'Broadband', 'Mr Glasses', '+123344', 'MY ADDRESS', '880@myemail', '', '']
val2= ['12345653', 'SOUTH', 'IPTV', 'Mr Glasses', '+123344', 'MY ADDRES', '', '999@myemail', '']
val3= ['98102344', 'SOUTH', 'Voice', 'Ms Chair', '+99123123', 'Corner Street Behind Door', '', '', '990@securemail']
val4= ['11023424', 'SOUTH', 'IPTV', 'Mr Tree', '+125324', 'Upwards error 123', '', '47@securemail', '']
my_list.append(val1)
my_list.append(val2)
my_list.append(val3)
my_list.append(val4)
for x in my_list:
print x
print 'start removing duplication'
print ''
def rm_dupl(my_list):
fin_list = []
dev_exist = []
for x in my_list:
dev_id = x[0]
if dev_id in dev_exist:
# if entry exist, we just update the existing entry with
# the value of this current x, and not creating a new entry
for y in fin_list:
if dev_id in y[0]:
# y is retrieved value
# below we update with the duplication one
if 'Broadband' in x[2]:
y[2] += '_Broadband'
y[6] = x[6]
elif 'IPTV' in x[2]:
y[2] += '_IPTV'
y[7] = x[7]
elif 'Voice' in x[2]:
y[2] += '_Voice'
y[8] = x[8]
else:
continue
else:
fin_list.append(x)
dev_exist.append(dev_id)
return fin_list
updated_list = rm_dupl(my_list)
for x in updated_list:
print x