查找来自不同嵌套JSON数组的重复项

时间:2019-06-14 14:44:07

标签: python arrays 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。 预先感谢。

1 个答案:

答案 0 :(得分:1)

这将循环访问并检查嵌套列表中是否还有任何项目在另一个嵌套列表中。然后它将收集它们的索引位置,然后仅使用那些索引位置来重建字典。只要您的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']}]}