Обнаружение дубликатов в Django
У меня есть большая база данных контактов, каждый из которых принадлежит определенному пользователю. Я пытаюсь удалить все дубликаты в списке контактов каждого пользователя. Самое простое, казалось бы, аннотировать строкой user_id||name||address||zipcode, Count, и фильтровать по count > 1. Это работает в большинстве случаев, но у меня есть несколько странных дубликатов. Может ли кто-нибудь указать, что я упускаю?
Вот некоторый код... Я фильтрую по определенному имени, которое, как я знаю, имеет дубликаты для тестирования.
neighbors = neighbors.filter(name__icontains='JOHN WILLIAMS')
keyed_neighbors = neighbors.values('user_id', 'name', 'address', 'zipcode', 'pk'
).annotate(dupe_id=Concat(
Cast('user_id', CharField(max_length=25)), Value('||'),
Upper('name'), Value('||'),
Upper('address'), Value('||'),
Substr('zipcode', 1, 5), Value('||'),
Upper('address_line_two'), output_field=CharField()))
dupes = keyed_neighbors.annotate(dupe_id_count=Count('dupe_id'))
Вот подмножество dupe_ids, которые я получаю обратно, и подсчеты:
{'dupe_id': u'174563||JOHN WILLIAMS||222 WEDGEFIELD DR||28376||', 'dupe_id_count': 1}
{'dupe_id': u'175875||JOHN WILLIAMS||4 TALLIN CT||29607||', 'dupe_id_count': 1}
{'dupe_id': u'175875||JOHN WILLIAMS||4 TALLIN CT||29607||', 'dupe_id_count': 1}
{'dupe_id': u'177178||JOHN WILLIAMS||5106 PAUL PEEL PL||28348||', 'dupe_id_count': 1}
{'dupe_id': u'51||JOHN WILLIAMS||2410 COLGATE DR||28304||', 'dupe_id_count': 1}
{'dupe_id': u'51||JOHN WILLIAMS||2410 COLGATE DR||28304||', 'dupe_id_count': 1}
{'dupe_id': u'51||JOHN WILLIAMS||4 TALLIN CT||29607||', 'dupe_id_count': 1}
Если кто-то может пролить свет на мою ошибку, буду очень признателен.