python - 从不同的嵌套 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。提前致谢。
解决方案
这将遍历并检查嵌套列表中的任何项目是否也在另一个嵌套列表中找到。然后它将收集它们的索引位置,然后仅使用这些索引位置重建字典。只要您的 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']}]}
推荐阅读
- linux - 如何使用devilspie2在一个工作区打开一个窗口然后停止它?
- python - 在分组数据框的两列上移动滚动移动平均值
- python - Micropython 电报机器人仅轮询聊天记录中的第一条消息
- numpy - 具有自定义过滤的数组的 numpy 数组
- python-3.x - 更新时自动更新时间戳
- python - 带有 Newtonsoft 的 ac# 类中的 Python 序列化 JSON
- timescaledb - timescaledb 的保留政策不起作用
- web-performance - 为什么 TBT 在 ChromeDev Tools 中“不可用”?
- blazor - 使用 BlazorBarcodeScanner.ZXing.JS 会产生异常
- inheritance - 实现两个组件的代码模块化,以非常不同的接口解决相同的问题