从 python 中的集合字典创建动态列表(labels_true 和 labels_pred)



我必须根据以下字典创建一个列表 第一本字典是

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 等文件夹名称,它们将从聚类字典中检查图像名称,并检查有关该图像位于哪个文件夹中的 groundtruth 并将该文件夹编号返回到label_pred列表中。 例如,在下面的labels_pred中,我们有两个 3 合 1 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)

您可以通过为开始制作反向字典来做到这一点,

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  

然后,由于图像的顺序在第一个原始字典中,因此您可以在列表中获取值,并且对于您的 2 个列表,对每个字典进行反向查找,如下所示

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())]

注意:该链用于展平从值返回的双精度列表

由于某些文件上的额外***不清楚它们的作用,我假设您之前对它们进行了条纹化处理,否则您可以在任何必要的地方在上述4行中执行此操作

最新更新