【问题标题】:Merge duplicate json elements using Python使用 Python 合并重复的 json 元素
【发布时间】:2020-03-07 05:50:13
【问题描述】:

我想对磁盘上的图像文件执行重复数据删除。我有一个描述重复对的 json 文件(来自重复图像查找器的输出)。如果我要配置自动删除规则,因为通常有两个以上的重复图像,我可能会取消链接所有图像实例。示例 json 文件如下所示:

{"images" : [
    {"image1": "./folder1/IMG_013251.jpg", "image2": "./folder3/IMG_013251.jpg", "similarity": 100},
    {"image1": "./folder1/IMG_013251.jpg", "image2": "./folder5/IMG-WA0149.jpg", "similarity": 100},
    {"image1": "./folder1/IMG-WA0149.jpg", "image2": "./folder4/IMG-WA0125.jpg", "similarity": 100},
    {"image1": "./folder5/IMG-WA0149.jpg", "image2": "./folder4/IMG-WA0125.jpg", "similarity": 100},
    {"image1": "./folder2/IMG-WA0149.jpg", "image2": "./folder3/IMG-WA0125.jpg", "similarity": 100},
    {"image1": "./folder3/IMG_045262.jpg", "image2": "./folder8/IMG_013251.jpg", "similarity": 100},
    {"image1": "./folder4/IMG-WA0024.jpg", "image2": "./folder1/IMG-WA0079.jpg", "similarity": 100},
    {"image1": "./folder5/IMG-WA0130.jpg", "image2": "./folder4/IMG-WA0024.jpg", "similarity": 100}]}

我的第一个想法是修改json看起来像这样但无法解决逻辑:


{"images" : [
    {"image1": "./folder1/IMG_013251.jpg", "image2": "./folder3/IMG_013251.jpg", "image3": "./folder5/IMG-WA0149.jpg", "similarity": 100},    
    {"image1": "./folder1/IMG-WA0149.jpg", "image2": "./folder4/IMG-WA0125.jpg", "image3": "./folder5/IMG-WA0149.jpg", "similarity": 100},  
    {"image1": "./folder2/IMG-WA0149.jpg", "image2": "./folder3/IMG-WA0125.jpg", "similarity": 100},
    {"image1": "./folder3/IMG_045262.jpg", "image2": "./folder8/IMG_013251.jpg", "similarity": 100},
    {"image1": "./folder4/IMG-WA0024.jpg", "image2": "./folder1/IMG-WA0079.jpg", "image3": "./folder5/IMG-WA0130.jpg", "similarity": 100}]}

我最初的方法是创建两个列表,然后将每个元素与其他元素进行比较,将重复项放入字典中。我试过这个,它没有给我有用的输出。我还查看了 dict.update() 方法,但我不确定如何首先识别重复的字典。我还能如何处理这个问题?

谢谢,

【问题讨论】:

    标签: python json python-3.x merge


    【解决方案1】:

    一种方法是计算等价集。

    基本上,假设相似关系是可传递的,您将遍历情侣列表并生成所有等效图片的集合。然后从集合中取出一个实例并断开其他实例的链接。

    例如,基于您的数据的集合是:

    set1 = {"./folder1/IMG_013251.jpg", "./folder5/IMG-WA0149.jpg", "./folder4/IMG-WA0125.jpg", "./folder3/IMG_045262.jpg", }
    set2 = {"./folder4/IMG-WA0024.jpg", "./folder1/IMG-WA0079.jpg", "./folder5/IMG-WA0130.jpg"}
    

    从中,您可以选择一个实例来保存和取消链接其他实例。

    用您的数据布局计算等价集的一种方法是:

    set_lists = []
    for couple in dict["images"]:
        if couple["similarity"] > thresh:
            img1 = couple["image1"]
            img2 = couple["image2"]
            for eq_set in set_lists:
                if img1 in eq_set:
                    eq_set.add(img2)
                    break
                elif img2 in eq_set:
                    eq_set.add(img1)
                    break
             else:
                 new_set = set([img1, img2])
                 set_lists.append(new_set)
    

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 2023-04-02
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多