#json #python-3.x #dictionary
#json #python-3.x #словарь
Вопрос:
Мой скрипт на Python работает и добавляется в мой файл JSON; однако я безуспешно пытался добавить идентификатор пронумерованной записи. Кроме того, я пытаюсь получить определенный результат каждый раз, когда вычисления повторяются. Ищу подробные примеры и рекомендации.
Текущий скрипт Python
import json
# Dictionary All-Calculations
def dict_calc(num1, num2):
add = str(float(num1) float(num2))
sub = str(float(num1)-float(num2))
mul = str(float(num1)*float(num2))
div = str(float(num1)/float(num2))
calc_d = {"Add" : add, "Subtract" : sub, "Multiply" : mul, "Divide" : div}
return calc_d
# Yes or No
def y_n(answer):
if answer[:1] == 'y':
return True
if answer[:1] == 'n':
return False
# Main Dictionary
data_table = {}
while True:
num1 = input("n Enter first number: ")
num2 = input("n Enter second number: ")
data_table = dict_calc(num1, num2)
with open('dict_calc.json', 'a', encoding='utf-8') as f:
json.dump(data_table, f, ensure_ascii=True, indent=4)
answer = input("n Run Again? (Y/N) ").lower().strip()
if y_n(answer) == True:
continue
else:
print("n Thank You and Goodbye")
break
Текущий пример вывода
{
"Add": "579.0",
"Subtract": "-333.0",
"Multiply": "56088.0",
"Divide": "0.26973684210526316"
}{
"Add": "1245.0",
"Subtract": "-333.0",
"Multiply": "359784.0",
"Divide": "0.5779467680608364"
}{
"Add": "1396.0",
"Subtract": "554.0",
"Multiply": "410475.0",
"Divide": "2.315914489311164"
}
Желаемый пример вывода — я пытаюсь добавить запись плюс число, которое увеличивается после каждой итерации. Кроме того, я также пытаюсь эмулировать этот же вывод.
[
{
"Entry": "1",
"Add": "579.0",
"Subtract": "-333.0",
"Multiply": "56088.0",
"Divide": "0.26973684210526316"
},
{
"Entry": "2",
"Add": "1245.0",
"Subtract": "-333.0",
"Multiply": "359784.0",
"Divide": "0.5779467680608364"
},
{
"Entry": "3",
"Add": "1396.0",
"Subtract": "554.0",
"Multiply": "410475.0",
"Divide": "2.315914489311164"
}
]
Комментарии:
1. Привет @JGio и добро пожаловать в SO. Я не очень хорошо разбираюсь в python, но если я понимаю, я думаю, вы хотите создать массив объектов. Попробуйте этот пример: импортировать json # некоторый JSON: x = ‘{ «имя»:»Джон», «возраст»:30, «город»:»Нью-Йорк»}’ # разобрать x: y = [json.loads(x)] # результатом является словарь Python:print(y)
Ответ №1:
JSON — это вложенная структура. Вы не можете просто добавить к нему больше данных. Для этого см. Формат строк JSON.
Если используется обычный формат JSON, вы должны прочитать всю структуру JSON, обновить ее, а затем записать ее полностью снова или просто записать, как только структура будет завершена.
Пример:
import json
# Dictionary All-Calculations
def dict_calc(num1, num2, entry):
add = str(float(num1) float(num2))
sub = str(float(num1)-float(num2))
mul = str(float(num1)*float(num2))
div = str(float(num1)/float(num2))
calc_d = {"Entry": str(entry), "Add" : add, "Subtract" : sub, "Multiply" : mul, "Divide" : div}
return calc_d
# Yes or No
def y_n(answer):
if answer[:1] == 'y':
return True
if answer[:1] == 'n':
return False
# Empty List that will hold dictionaries.
data_table = []
entry = 0 # for tracking entry numbers
while True:
num1 = input("n Enter first number: ")
num2 = input("n Enter second number: ")
# Count entry and add it to dictionary list.
entry = 1
data_table.append(dict_calc(num1, num2, entry))
answer = input("n Run Again? (Y/N) ").lower().strip()
if y_n(answer) == True:
continue
else:
print("n Thank You and Goodbye")
# Write the complete list of dictionaries in one operation.
with open('dict_calc.json', 'w', encoding='utf-8') as f:
json.dump(data_table, f, ensure_ascii=True, indent=4)
break
Вывод:
[
{
"Entry": "1",
"Add": "3.0",
"Subtract": "-1.0",
"Multiply": "2.0",
"Divide": "0.5"
},
{
"Entry": "2",
"Add": "8.0",
"Subtract": "-1.0",
"Multiply": "15.75",
"Divide": "0.7777777777777778"
},
{
"Entry": "3",
"Add": "13.399999999999999",
"Subtract": "-2.2",
"Multiply": "43.68",
"Divide": "0.717948717948718"
}
]
Ответ №2:
Несколько вещей, которые вам, возможно, потребуется изменить:
- вам нужно изменить тип data_table на list .
- вам нужно добавить к нему результат функции dict_calc .
- Добавьте счетчик
Вот ваш код:
import json
# Dictionary All-Calculations
def dict_calc(counter, num1, num2):
add = str(float(num1) float(num2))
sub = str(float(num1)-float(num2))
mul = str(float(num1)*float(num2))
div = str(float(num1)/float(num2))
calc_d = {"Entry": str(counter), "Add" : add, "Subtract" : sub, "Multiply" : mul, "Divide" : div}
return calc_d
# Yes or No
def y_n(answer):
if answer[:1] == 'y':
return True
if answer[:1] == 'n':
return False
# Main Dictionary
data_table = []
counter = 1
while True:
num1 = input("n Enter first number: ")
num2 = input("n Enter second number: ")
data_table.append( dict_calc(counter, num1, num2))
counter = 1
with open('dict_calc.json', 'a', encoding='utf-8') as f:
json.dump(data_table, f, ensure_ascii=True, indent=4)
answer = input("n Run Again? (Y/N) ").lower().strip()
if y_n(answer) == True:
continue
else:
print("n Thank You and Goodbye")
break
Комментарии:
1. Не удается добавить в JSON. Посмотрите на свой выходной файл.