Лучший способ добавить словарную статью и добавить в файл JSON в Python - PullRequest
0 голосов
/ 30 мая 2018

Мне нужно добавить записи в словарь со следующими ключами:

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 голосов
/ 30 мая 2018

вы можете попробовать таким образом

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))
0 голосов
/ 30 мая 2018

Здесь есть несколько вопросов.Основные моменты, на которые стоит обратить внимание:

  • Использование может использовать list для хранения ваших аргументов и *args для распаковки, когда вы предоставляете их add_entry.
  • Для проверки/ избежать дубликатов, вы можете использовать set для отслеживания уже добавленных элементов.
  • Для записи в JSON, теперь у вас есть список, вы можете просто перебрать свой список и написать в конце одну функцию.

Объединение этих аспектов:

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'}]

Запись в 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...