我正在尝试更新现有的json文件,该文件在python3中具有字典列表
.
.
"guests": [
{
"name": "name1",
"package": {
"age": "30",
"dob": "Oct 10",
"image": "name1.img",
"address": "xxx"
}
},
{
"name": "name2",
"package": {
"age": "20",
"dob": "Oct 10",
"image": "name2.img",
"address": "xxx"
}
}
]
.
.
我想用新数据更新每个来宾数据,如果不存在来宾(name
),请以新来宾身份将来宾数据追加到列表中。
如何在python中实现呢?
答案 0 :(得分:2)
您可以使用await Future.forEach(allUserDocuments.documents, (userDocument) async {
...
});
运算符检查字典中是否存在某个键。
in
答案 1 :(得分:1)
data
包含您的样本数据列表。 data_new
是您要检查的数据是否存在。如果名称存在,则它正在更新data
列表并设置一个标志来更新它。如果不存在,则不设置该标志,以便将新数据追加到列表中。
数据列表
data = { "guests": [
{
"name": "name1",
"package": {
"age": "30",
"dob": "Oct 10",
"image": "name1.img",
"address": "xxx"
}
},
{
"name": "name2",
"package": {
"age": "20",
"dob": "Oct 10",
"image": "name2.img",
"address": "xxx"
}
}
] }
查询数据
guest_new = {
"name": "name3",
"package": {
"age": "21",
"dob": "Nov 11",
"image": "name3.img",
"address": "xxxxxxxxxx"
}
}
guest_flag = 0
更新(如果存在)或添加
for i in range (0, len(data["guests"])):
if(data['guests'][i]['name'] == guest_new['name']):
data['guests'][i]['package'] = guest_new['package']
guest_flag = 1
if(guest_flag == 0):
data['guests'].append(guest_new)
答案 2 :(得分:0)
要更新 json 文件,首先需要将其加载到 dict。然后你更新字典。最后,您将更新的 dict 转储回 json 文件。 关于更新guest对象列表,我宁愿构建一个以name为key的guest字典(根据问题描述,期望名字是唯一的)以简化更新路由。
import json
# list of new guests
new_guests = [
{
"name": "name1",
"package": {
"age": "300",
"dob": "Jan 1",
"image": "new_name1.img",
"address": "yyy"
}
},
{
"name": "name3",
"package": {
"age": "40",
"dob": "Oct 4",
"image": "name3.img",
"address": "zzz"
}
}
]
# path to your json file
path_to_json = 'path/to/data.json'
# load json to dict
with open(path_to_json) as f:
data = json.load(f)
# build dict of json guest using name as key
guests = {x['name']: x for x in data['guests']}
# update guests
for g in new_guests:
guests[g['name']] = g
# update data and dump it to the file
data['guests'] = [guests[name] for name in guests]
with open(path_to_json, 'w') as f:
json.dump(data, f)