2017-02-04 11 views
0

В настоящее время я работаю над базой данных notMINST, используя python 2.7, пытаясь удалить дублированные изображения. Я превращаю каждое изображение в хеш MD5 и создаю словарь image_hashБолее быстрый алгоритм удаления дубликатов из словарей, сравнение двух

Первый способ работы, однако, потребовалось почти час, поскольку в наборе данных было всего 500 000 изображений.

image_hash_identical = {} 
for key,value in image_hash.items(): 
    if value not in image_hash_identical.values(): 
     image_hash_identical[key] = value 

Я пытался использовать «набор» для создания второго метода, чтобы сделать вещи быстрее:

image_hash_set_values = list(set(image_hash.values())) 
for i in range(len(image_hash_set_values)): 
    for j in range(i, len(image_hash)): 
     image_hash[j] == image_hash_set_values[i]: 
      image_hash_identical[i] = image_hash[j] 
      break 

Однако этот код не удался ускорить процесс для «набора» функции перетасовал заказ of image_hash. Есть ли способ заблокировать перетасовку с помощью функции «set» или любых более быстрых алгоритмов, которые могут справиться с этой ситуацией?

+0

ли вы пытаетесь строить '' 'image_hash''' с хэш в качестве ключа? – wwii

+0

Нет, не как ключ, а как ценность. Я использовал ключ для представления идентификатора наблюдения – Xiuyuanc

ответ

1

Почему бы не просто следить видел значений с использованием набора:

image_hash_identical, seen = {}, set() 
for key, value in image_hash.items(): 
    if value not in seen: # contains of set: O(1) 
     image_hash_identical[key] = value 
     seen.add(value) 
+0

Отслеживание увиденных значений может быть выполнено при построении '' 'image_hash'''. – wwii

+0

Очень верно, тот же принцип. Особенно учитывая, что вы не контролируете порядок итераций, довольно случайный ключ остается. Но вы не всегда контролируете данные, с которыми имеете дело ...: '( – schwobaseggl

+0

Это тот же путь первого алгоритма, 'image_hash_identical.value()' работает так же, как 'seen'? – Xiuyuanc

 Смежные вопросы

  • Нет связанных вопросов^_^