我需要使用以下键将条目添加到字典中:
name
element
type
我希望每个条目都附加到JSON文件,我将在其中访问另一个项目。
我在技术上有以下工作,但有一些(至少)错误。
首先,它不会阻止输入重复项。例如,我可以拥有' xyz'' 4444'和' test2'多次显示为JSON条目。有没有办法纠正这个?
是否有更简洁的方式来编写实际的数据录入部分,因此当我将这些值输入字典时,它不是直接在括号中?
最后,是否有更好的地方放置JSON片?它应该在函数内吗?
试着稍微清理一下。感谢
import json
element_dict = {}
def add_entry(name, element, type):
element_dict["name"] = name
element_dict["element"] = element
element_dict["type"] = type
return element_dict
#add entry
entry = add_entry('xyz', '4444', 'test2')
#export to JSON
with open('elements.json', 'a', encoding="utf-8") as file:
x = json.dumps(element_dict, indent=4)
file.write(x + '\n')
答案 0 :(得分:1)
这里有几个问题。值得一提的要点是:
list
来保存您的参数,并在将*args
提供给add_entry
时使用set
解压缩。import json
res = []
seen = set()
def add_entry(res, name, element, type):
# check if in seen set
if (name, element, type) in seen:
return res
# add to seen set
seen.add(tuple([name, element, type]))
# append to results list
res.append({'name': name, 'element': element, 'type': type})
return res
args = ['xyz', '4444', 'test2']
res = add_entry(res, *args) # add entry - SUCCESS
res = add_entry(res, *args) # try to add again - FAIL
args2 = ['wxy', '3241', 'test3']
res = add_entry(res, *args2) # add another - SUCCESS
来跟踪已添加的项目。将这些方面放在一起:
print(res)
[{'name': 'xyz', 'element': '4444', 'type': 'test2'},
{'name': 'wxy', 'element': '3241', 'type': 'test3'}]
结果:
def write_to_json(lst, fn):
with open(fn, 'a', encoding='utf-8') as file:
for item in lst:
x = json.dumps(item, indent=4)
file.write(x + '\n')
#export to JSON
write_to_json(res, 'elements.json')
通过函数写入JSON:
{{1}}
答案 1 :(得分:1)
你可以这样试试
import json
import hashlib
def add_entry(name, element, type):
return {hashlib.md5(name+element+type).hexdigest(): {"name": name, "element": element, "type": type}}
#add entry
entry = add_entry('xyz', '4444', 'test2')
#Update to JSON
with open('my_file.json', 'r') as f:
json_data = json.load(f)
print json_data.values() # View Previous entries
json_data.update(entry)
with open('elements.json', 'w') as f:
f.write(json.dumps(json_data))