我必须创建一个基于以下字典的列表第一个字典是
groundTruth = {'1': ['IMG_0001.png', 'IMG_0002.png', '**IMG_0003.png**', '**IMG_0004.png**'],
'2': ['IMG_0020.png', 'IMG_0021.png', 'IMG_0022.png', 'IMG_0023.png'],
'3': ['IMG_0051.png', 'IMG_0052.png', 'IMG_0053.png', 'IMG_0054.png']}
第二本字典是
clustering = {'1': ['IMG_0001.png', 'IMG_0002.png', '**IMG_0053.png**', '**IMG_0054.png**'],
'2': ['IMG_0020.png', 'IMG_0021.png', 'IMG_0022.png', 'IMG_0023.png'],
'3': ['**IMG_0003.png**', '**IMG_0004.png**', 'IMG_0051.png', 'IMG_0052.png']}
因此,我必须创建两个列表labels_true,它将由像1,2,3和labels_pred这样的文件夹名称组成,它将检查集群字典中的图像名称,并检查该图像位于哪个文件夹中,并将该文件夹编号返回到label_pred列表中。例如,在下面的labels_pred中,我们有两个3合1的图像,因为这两个图像出现在聚类字典的第一个文件夹中。
那么,我应该如何在python中创建这个动态列表呢?我是Python的新手。感谢你的帮助。非常感谢。
from sklearn import metrics
labels_true = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
labels_pred = [1, 1, 3, 3, 2, 2, 2, 2, 3, 3, 1, 1]
metrics.adjusted_rand_score(labels_true, labels_pred)
发布于 2020-07-01 03:44:07
你可以通过为start制作颠倒的字典来做到这一点,
rground = {image:folder for folder, images in zip(clustering.keys(),clustering.values()) for image in images
rcluster = {image:folder for folder, images in zip(clustering.keys(),clustering.values()) for image in images
然后,由于图像的顺序在第一个原始字典中,您可以获得列表中的值,并且对于您的两个列表,对每个字典进行反向查找,如下所示
from itertools import chain
list_true = [rground[x] for x in chain.from_iterable(groundTruth.values())]
list_pred = [rcluster[x] for x in chain.from_iterable(groundTruth.values())]
注意:该链用于展平从values返回的双列表
由于一些文件上的额外*不清楚它们的作用,我假设您以前对它们进行了剥离,否则您可以在上面的4行中根据需要进行剥离
https://stackoverflow.com/questions/62662715
复制