как я могу создать список из списка в python? - PullRequest
1 голос
/ 25 апреля 2020

Я использую python 3: что я пытаюсь сделать? У меня есть список картинок (некоторые из них одинаковые, но с разными именами), я хочу сравнить их, просматривая список и группируя картинки, которые совпадают в подсписке или словаре,

* Например, 1002 * это список из 3000 pictures = [ 'A', 'B','D','F',...], который показывает, что после сравнения одинаковых 'A' и 'D' и 'B' и `` F'` я хочу создать новый список. с подсписком, как, например,
new list = [['A','D'],['B','F'],... 

или

mydict={ 'pic1'=['A','D'],'pic2'=['B','F'],...}.

В заключение я хочу упорядочить картинки, сгруппировав их, для тех, у кого разные имена, но одинаковые в одной группе .

Проблема, которую я обнаружил, заключается в том, что мой l oop не обновляет исходный список, удаляя те, которые совпадают, и после добавления в новый список, затем следующий элемент не должен быть таким же как следующий. для следующей итерации.

Я пробовал несколько методов, но ни один из них не обновляет исходный список (3000 один), некоторые каталог содержит 3000 элементов, этот последний метод дает индекс вне диапазона (k)

obj={}
for i in range(len(somecatalogue)):
  while True:
 #create a item for group same picture but different name
 obj['catalogue'+str(i)] = []
 for k in range(len(somecatalogue)):
         imageA = cv2.imread("C:\\Users\\"+somecatalogue[i])
         imageB = cv2.imread("C:\\Users\\products_images\\"+somecatalogue[k])
         #resizing the pictures height and width
         if imageA.shape[0]*imageA.shape[1] > 0:
           H, W,C = imageA.shape
     # to resize and set the new width and height
           imageB = cv2.resize(imageB, (W,H))
   #compare the picture+color, add it to the list of the dictionary , and remove it from the original
           if(measure.compare_ssim(imageA,imageB,multichannel=True)==1):
              obj['catalogue'+str(i)].append(somecatalogue[k])
              del(somecatalogue[k])
    #dont product more items form the dictionary if the, there is not more item leave to compare     
  if (len(somecatalogue))==0:
       break

1 Ответ

0 голосов
/ 25 апреля 2020
pictures = [ 'A', 'B','D','F']

OP: Предположим, что изображения A и D схожи, а B и F. схожи.

Я заменил B и F на A и B, чтобы упростить задачу:

pictures = [ 'A', 'B','A','B']

from collections import defaultdict

dict_ = defaultdict(list)
for ind, elem in enumerate(pictures):
    dict_[elem].append(elem)

print(list(dict_.values()))

ВЫХОД:

[['A', 'A'], ['B', 'B']] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...