在Python中添加字典条目并附加到JSON文件的最佳方法

时间:2018-05-30 17:48:58

标签: python json dictionary

我需要使用以下键将条目添加到字典中:

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')

2 个答案:

答案 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 来跟踪已添加的项目。
  • 为了写入JSON,现在你有一个列表,你可以简单地迭代你的列表并在最后写一个函数。

将这些方面放在一起:

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))