首页 > 解决方案 > 从不同的嵌套 JSON 数组中查找重复项

问题描述

我有一个巨大的 JSON 结构,看起来像这样。

{
  "Collection":[
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test1",
         "test2",
         "test3"
       ]
    },
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test4",
         "test2",
         "test5"
       ]
    },
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test7",
         "test8",
         "test9"
       ]
    }
  ]
}

我想要的是仅基于嵌套数组查找和打印重复项。

像这样:

{
  "Collection":[
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test1",
         "test2",
         "test3"
       ]
    },
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test4",
         "test2",
         "test5"
       ]
    }
  ]
}

我想这样做,所以我可以检查应该删除哪些重复项,因为只有嵌套数组有重复项。

我会提供我的作品,但我找不到任何东西,而且我不习惯 Python。提前致谢。

标签: pythonarraysjson

解决方案


这将遍历并检查嵌套列表中的任何项目是否也在另一个嵌套列表中找到。然后它将收集它们的索引位置,然后仅使用这些索引位置重建字典。只要您的 json 遵循这种格式,它就应该可以工作:

example = {
  "Collection":[
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test1",
         "test2",
         "test3"
       ]
    },
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test4",
         "test2",
         "test5"
       ]
    },
    {
    "field0":"string",
    "field1":"string",
    "field2":"string",
    "field3":"string",
    "field4":"string",
    "field5":"string",
    "field6":"string",
    "field7":"string",
    "field8":"string",
      "field9":[
         "test7",
         "test8",
         "test9"
       ]
    }
  ]
}


repeat_idx = []    
for idx, each in enumerate(example['Collection']):
    for k, v in each.items():
        if type(v) == list and len(v) > 1:
            nested_list = v

            for idx2, each2 in enumerate(example['Collection']):
                if idx == idx2:
                    continue

                for k2, v2 in each2.items():
                    if type(v2) and len(v2) > 1:
                        if len([i for i in nested_list if i in v2]):
                            if idx not in repeat_idx:
                                repeat_idx.append(idx)


repeats = {}
repeats['Collection'] = []

for idx in repeat_idx:
    repeats['Collection'].append(example['Collection'][idx])

使用 pprint 输出:

import pprint
pprint.pprint(repeats)


{'Collection': [{'field0': 'string',
                 'field1': 'string',
                 'field2': 'string',
                 'field3': 'string',
                 'field4': 'string',
                 'field5': 'string',
                 'field6': 'string',
                 'field7': 'string',
                 'field8': 'string',
                 'field9': ['test1', 'test2', 'test3']},
                {'field0': 'string',
                 'field1': 'string',
                 'field2': 'string',
                 'field3': 'string',
                 'field4': 'string',
                 'field5': 'string',
                 'field6': 'string',
                 'field7': 'string',
                 'field8': 'string',
                 'field9': ['test4', 'test2', 'test5']}]}

推荐阅读