如果在大 JSON 数据中发现类似的特定键,如何删除嵌套数据?
Posted
技术标签:
【中文标题】如果在大 JSON 数据中发现类似的特定键,如何删除嵌套数据?【英文标题】:How can I remove a nested data If a specific key found similar in big JSON data? 【发布时间】:2022-01-24 03:23:59 【问题描述】:过滤的简单方法是将它们全部循环,但请相信我,因为我有非常大量的数据循环非常耗时,而且可能不是非常有效的方法,
[
"from_name": "Haio",
"from_id": 183556205,
"receiver_name": "Shubh M",
"targeted_id": 78545445,
"gift_value": '$56'
,
"from_name": "Mr. A",
"from_id": 54545455,
"receiver_name": "haio",
"targeted_id": 78545445,
"gift_value": '$7'
]
我想完成什么?
如果targeted_id
相同,我只想删除字典
【问题讨论】:
你能展示一下你试过的循环,哪个太慢了吗? 那么在这种情况下,您是要删除两个条目,因为它们具有相同的 targetid 还是只有其中一个?如果只有其中一个,你想保留哪一个?你最终只想要一个不同的 targetid 列表吗? 您的数据来源是什么?它是一个文件,你想写一个新文件吗?您要“就地”删除重复项还是要创建一个没有重复项的新列表? “大量”是什么意思? 【参考方案1】:如果您可以将整个数据集加载到内存中,请使用 pandas 和 drop_duplicates
。默认情况下,它将保留每组重复记录中的第一个。创建数据帧会产生一些开销,但如果要处理大量记录,那么以这种方式删除重复项应该比 python 循环快得多。
import pandas as pd
data =[
"from_name": "Haio",
"from_id": 183556205,
"receiver_name": "Shubh M",
"targeted_id": 78545445,
"gift_value": '$56'
,
"from_name": "Mr. A",
"from_id": 54545455,
"receiver_name": "haio",
"targeted_id": 78545445,
"gift_value": '$7'
]
df = pd.DataFrame(data).drop_duplicates(subset=['targeted_id'])
print(df.to_json()) # or specify a file name to save it
【讨论】:
【参考方案2】:def remove_duplicates(lst, key=lambda x: x, acc=[], keys = []):
if lst == []:
return acc
elif key(lst[0]) in keys:
return remove_duplicates(lst[1:], key=key, acc=acc, keys=keys)
else:
return remove_duplicates(lst[1:], key=key, acc = acc + [lst[0]], keys=keys + [key(lst[0])])
```
【讨论】:
由于数据被认为是“巨大的”,我认为任何基于递归的解决方案都行不通。以上是关于如果在大 JSON 数据中发现类似的特定键,如何删除嵌套数据?的主要内容,如果未能解决你的问题,请参考以下文章