我为这个疯狂的标题感到抱歉。我是编程新手,不知道我在做什么。
我正在做一个体重跟踪器,它将数据保存到JSON中。数据是一个嵌套的字典,应该看起来像:
{
"Dates": {
"11/11/11": {
"Morning": 500,
"Night": 502
}
}
}
我一直在尝试让跟踪器要求输入日期,并使用该输入作为“日期”键的新值,只要日期不存在,如果它确实存在,然后根据用户输入将新值附加到早晨或夜晚键。
下面是我的代码:
weight_date_dict = open('main.json')
today = input("Enter the date(MM/DD/YY): ")
data = json.loads(weight_date_dict.read())
if today not in data:
data['Dates'] = today
answer = input("Morning or Night? (Case sensitive): ")
if answer == "Morning":
m_weight = input("Weight? ")
#ERROR: Cant index a string('Dates') with a string(today)
data['Dates'][today]['Morning'] = m_weight
elif answer == "Night":
n_weight = input("Weight? ")
data['Dates'][today]['Night'] = n_weight
else:
print("Please enter Morning or Night.")
在解决了如何写入json而不覆盖其中以前的字典键/值之后,我添加了:
if today not in data:
data['Dates'] = today
data['Dates'][today] = {'Morning': None, 'Night': None}
添加一个新的日期,结果是“TypeError:'str对象不支持项分配'“data['Dates'][today]['Morning'] = m_weight
行应该向Morning或Night键追加一个新值,但它不起作用,因为字符串不能被字符串索引。
我不知道如何将值附加到一个自用户输入以来已经存在的日期。我觉得我完全不知道该怎么做。
2条答案
按热度按时间9lowa7mx1#
你的代码有几个问题:
首先
不是你想的那样。
today not in data
检查today
是否存在于data
中,但所有实际数据都在data['Dates']
中。此外,通过执行data['Dates'] = today
,您将覆盖所有这些数据。你真正想做的是:这就是为什么稍后尝试执行
data['Dates'][today]
时会出现错误的原因。data['Dates']
不再是你的数据字典,它是今天的日期字符串。您的代码还存在一些其他问题,例如不能将用户输入从字符串转换为整数。我还做了一些修改,以减少代码,使其更干净。以下是我为你工作的完整代码:
biswetbf2#
您应该检查由
"Dates"
键标识的子对象中的日期,如果它还不存在,则将其设置为空对象。此外,您需要将用户输入从str转换为int。
最后,使用
json.dump
将更新后的版本写入程序结束时的文件。