我编写了一个python脚本,该脚本连接到sql数据库并返回查询。我获取此查询并循环遍历以将其存储在列表中,然后将其写入JSON文件。
我目前正在编写一个单独的脚本,该脚本将从JSON文件中检索此数据并循环遍历,以仅根据某些条件返回数据。
JSON格式包含许多几乎完全相同的记录,如下所示:
{
"email": "EMAIL@HOTMAIL.COM",
"reason_code": "PENDING",
"product": "SWRD",
"record_id": "0000000001"
},
{
"email": "EMAIL@HOTMAIL.COM",
"reason_code": "CONFIRM",
"product": "KNFE",
"record_id": "0000000001"
}
我想遍历此文件,仅将满足以下条件的记录返回到列表中:
record_id
(很多重复的record_id)record_id
重复,那么我只想将具有"product":"SWRD"
的记录返回到random_list record_id
不重复,则返回任意列表我如何解决该问题: 我遍历了文件并将所有内容存储在python列表中。我复制了该列表,然后遍历这两个列表,尝试将块返回到新列表中。那没有用。 似乎我需要遍历文件并将所有内容存储到列表中。然后好像我需要遍历该列表,从列表中提取第一个块,将其与列表的其余部分进行比较,如果不匹配,则将该块返回到新列表,如果有匹配,然后根据条件通过if-else语句。然后,我将第二个程序段重复一遍。我只是不确定如何去实现这一目标。
因此,当我完成操作时,我将拥有一个没有重复的record_id的JSON文件。如果有人可以帮助我,那就太好了。如果需要,我可以发布代码示例,但是我必须更改一些代码才能在线发布。如果您有任何疑问,请告诉我
答案 0 :(得分:0)
制作一个{record_id: {product: json_object}}
的字典,然后您可以基于record_id
进行每product
的处理
import json
from collections import defaultdict
with open('input.json') as f:
obj_list = json.load(f)
d = defaultdict(dict)
for obj in obj_list:
d[obj['record']][obj['product']] = obj
l = []
for products in d.values():
if 'SWRD' in products:
l.append(products['SWRD'])
else:
_, product = products.popitem() # get some other product, we don't care which
l.append(product)
with open('output.json', 'w+') as f:
json.dump(l, f)