Json 在Python字典中从用户动态获取输入
我创建了一个Python字典结构,如下所示:Json 在Python字典中从用户动态获取输入,json,python-3.x,Json,Python 3.x,我创建了一个Python字典结构,如下所示: import pprint log_data = { 'Date':'', 'Prayers':{ 'Fajr':'', 'Dhuhr/Jumu\'ah':'', 'Asr':'', 'Maghrib':'', 'Isha\'a':'' }, 'Task List':[{ 'Task':'', 'Ti
import pprint
log_data = {
'Date':'',
'Prayers':{
'Fajr':'',
'Dhuhr/Jumu\'ah':'',
'Asr':'',
'Maghrib':'',
'Isha\'a':''
},
'Task List':[{
'Task':'',
'Timeline':'',
'Status':''
}],
'Meals':{
'Breakfast':{
'Menu':'',
'Place':'',
'Time':''
},
'Lunch':{
'Menu':'',
'Place':'',
'Time':''
},
'Evening Snacks':{
'Menu':'',
'Place':'',
'Time':''
},
'Dinner':{
'Menu':'',
'Place':'',
'Time':''
}
},
'Exercises':[{
'Exercise':'',
'Duration':''
}]
}
pprint.pprint(log_data)
正如您所看到的,这只是一个没有数据的字典结构。我想迭代所有键,并使用input()
将输入数据作为用户的值。
然后我想将这个字典保存为json文件。
请您帮助我如何迭代所有键并从用户处获取输入。
谢谢
已搜索,但找不到我需要的确切类型的帮助 对于这种情况,需要使用递归 这不是幻想,但可以完成工作:
from copy import deepcopy
import json
import pprint
log_data = {
'Date':'',
'Prayers':{
'Fajr':'',
'Dhuhr/Jumu\'ah':'',
'Asr':'',
'Maghrib':'',
'Isha\'a':''
},
'Task List':[{
'Task':'',
'Timeline':'',
'Status':''
}],
# ...
}
def input_fields(substruct, path=""):
print(f"Inputing values '{path}':")
for fieldname, value in substruct.items():
if isinstance(value, (str, int)):
substruct[fieldname] = input(f"{path}.{fieldname}: ")
elif isinstance(value, dict):
input_fields(value, f"{path}.{fieldname}")
elif isinstance(value, list):
original = value[0]
value.pop()
counter = 0
if not isinstance(original, dict):
raise ValueError("Not supported: A list should contain a dictionary-substructure")
while True:
item = deepcopy(original)
input_fields(item, f"{path}.{fieldname}.[{counter}]")
value.append(item)
continue_ = input(f"Enter one more {path}.{fieldname} item? (y/n) ").lower().strip()[0] == "y"
if not continue_:
break
counter+=1
return substruct
def main():
values = input_fields(deepcopy(log_data))
json.dump(values, open("myfile.json", "wt"), indent=4)
if __name__ == "__main__":
main()
谢谢。工作完美@杰斯布埃诺