Я ищу дубликаты записей в файлах DBF на основе атрибута с именем «ID». У меня есть различные файлы DBF от 500 000 записей до 1,5 миллиона, и я знаю, что есть множество дубликатов.
Я хотел бы добавить поле «Дублировать», которое говорит «Да» или «Нет» (или 1 или 0 в порядке), когда атрибут идентификатора присутствует в другом месте. При использовании следующего скрипта Python в Field Calculator возвращается 1 для дублированной записи и 0 для уникальной записи;
uniqueList = []
def isDuplicate(inValue):
if inValue in uniqueList:
return 1
else:
uniqueList.append(inValue)
return 0
isDuplicate(!FIELD_NAME!)
Однако 1-я запись, например, 5 дубликатов идентификаторов также будет возвращена как 0 (последующие 4 считаются дубликатами). Мне нужно, чтобы все 5 были отмечены как дубликаты, поскольку идентификатор существует в другом месте.
Использование следующего кода даст вам дополнительный подсчет того, сколько раз этот идентификатор встречается, причем 1 означает 1-й случай и т. Д .;
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue,0)
UniqueDict[inValue] += 1
return UniqueDict[inValue]
isDuplicateIndex( !YOUR_FIELD! )
Я просто хочу 1 (или Да), если идентификатор этой записи существует в другом месте! (ArcGIS версия 10.1)
Я видел другие ответы, такие как сценарий Python для определения дубликатов записей (продолжение), но это не совсем работает.
Другое альтернативное решение ( работает только со средами SDE ) заключается в использовании существующих функций SQL в ArcGIS для отображения дубликатов записей.
Получить повторяющиеся записи в таблице (выбор по атрибуту)
Пример:
источник
HAVING COUNT(*) > 1
. Я действительно не вижу способа заставить его работать в файловых базах геоданных. Я знаю, что эта техническая статья несколько устарела, но, похоже, она является источником вашего оператора SQL и указывает на то, что он не работает в файловых базах геоданных. Я готов объявить ваш ответ, если смогу заставить его работать в файле gdbs, или добавлено пояснение, указывающее, что они являются исключением.Следующий скрипт создает новое поле с количеством вхождений каждого значения из указанного поля. Так, например, если у вас есть «Париж» 6 раз в этом поле, каждый ряд с «Парижем» получит 6.
Его можно легко изменить, чтобы иметь значение «Да» или « 1», если число> 1, но я полагаю, что полезнее иметь фактическое число.
Позже Редактировать: Или вы можете использовать это в полевом калькуляторе. Код пре-логического кода:
дубликат поля =
источник