JD2*_*775 6 python json dictionary
我需要使用以下键将条目添加到字典中:
name
element
type
Run Code Online (Sandbox Code Playgroud)
我希望每个条目都附加到一个 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')
Run Code Online (Sandbox Code Playgroud)
这里有几个问题。值得一提的要点:
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
Run Code Online (Sandbox Code Playgroud)
结果:
print(res)
[{'name': 'xyz', 'element': '4444', 'type': 'test2'},
{'name': 'wxy', 'element': '3241', 'type': 'test3'}]
Run Code Online (Sandbox Code Playgroud)
通过函数写入 JSON:
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')
Run Code Online (Sandbox Code Playgroud)