Json 在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

我创建了一个Python字典结构,如下所示:

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

谢谢。工作完美@杰斯布埃诺