Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将值写入嵌套字典并使用列表指定路径_Python_Json_Python 3.x_Dictionary - Fatal编程技术网

Python 将值写入嵌套字典并使用列表指定路径

Python 将值写入嵌套字典并使用列表指定路径,python,json,python-3.x,dictionary,Python,Json,Python 3.x,Dictionary,我需要更新嵌套字典中的值,但是我有一个包含所有键的列表,我需要通过这些键才能得到这个值。但是,此列表是自动生成的,层的数量并不总是相同的 示例字典: {'pop_up_message': {'': []}, 'widgets': {'separator_dropdown': {'widget': '', 'location': {'columnspan': 1, 'row': 0, 'column': 11, 'sticky': 'e', 'rowspan': 1}, 'selected_opt

我需要更新嵌套字典中的值,但是我有一个包含所有键的列表,我需要通过这些键才能得到这个值。但是,此列表是自动生成的,层的数量并不总是相同的

示例字典:

{'pop_up_message': {'': []}, 'widgets': {'separator_dropdown': {'widget': '', 'location': {'columnspan': 1, 'row': 0, 'column': 11, 'sticky': 'e', 'rowspan': 1}, 'selected_option': '', 'position': 5}, 'go': {'widget': '', 'location': {'columnspan': 1, 'row': 0, 'column': 6, 'sticky': 'nsew', 'rowspan': 1}, 'position': 4}, 'middle_label': {'widget': '', 'type': 'label', 'location': {'columnspan': 2, 'row': 1, 'column': 5, 'sticky': 'nsew', 'rowspan': 1}, 'default_name': 'Translated File', 'position': 7}, 'export': {'widget': '', 'location': {'columnspan': 2, 'row': 0, 'column': 5, 'sticky': 'nsew', 'rowspan': 1}, 'default_name': 'Export to .txt', 'position': 10}, 'quit': {'widget': '', 'location': {'columnspan': 1, 'row': 1, 'column': 1, 'sticky': 'nsew', 'rowspan': 1}, 'position': 9}, 'separator_message': {'widget': '', 'type': 'label', 'location': {'columnspan': 1, 'row': 0, 'column': 11, 'sticky': 's', 'rowspan': 1}, 'default_name': 'Define Separator', 'position': 2}, 'output_table': {'height': 25, 'position': 8, 'widget': '', 'type': 'scroll_text', 'location': {'columnspan': 11, 'row': 1, 'column': 1, 'sticky': 'nsew', 'rowspan': 1}, 'default_state': 'disabled'}, 'input_table': {'height': 10, 'position': 6, 'widget': '', 'type': 'scroll_text', 'location': {'columnspan': 11, 'row': 1, 'column': 1, 'sticky': 'nsew', 'rowspan': 1}, 'default_state': 'normal'}, 'import_file': {'widget': '', 'location': {'columnspan': 2, 'row': 1, 'column': 4, 'sticky': 'nsew', 'rowspan': 1}, 'position': 3}, 'clear': {'widget': '', 'location': {'columnspan': 1, 'row': 0, 'column': 11, 'sticky': 'nsew', 'rowspan': 1}, 'position': 11}, 'input_message': {'widget': '', 'type': 'label', 'location': {'columnspan': 2, 'row': 1, 'column': 5, 'sticky': 'nsew', 'rowspan': 1}, 'default_name': 'Insert / Import FIX Message', 'position': 1}}, 'tab_restriction': 'EMC', 'name': 'FIX Translator'}
钥匙清单:

['widgets', 'separator_dropdown', 'location', 'row']
要更改的值: 从
0
3

我有一个嵌套字典(从JSON文件中读取)。这包含Tkinter应用程序的配置。使用Tkinter,我构建了一个界面,在这里我可以读取配置并将其显示在dict键为tk的帧上。标签和dict值是tk.Entry

我的想法是,我可以更新(条目小部件)接口,并从条目小部件中提取所有数据并更新JSON文件


现在,我有一个tk列表。在字典中输入值和关联的“路径”,现在需要更新该字典并将其另存为JSON。

您可以使用递归从字典中获取和设置:

def getNestedItem(字典,路径):
如果len(路径)>1:
返回getNestedItem(字典[路径[0]],路径[1:]
其他:
返回字典[路径[0]]
def setNestedItem(字典、路径、值):
如果len(路径)>1:
setNestedItem(字典[path[0]],路径[1:],值)
其他:
字典[路径[0]]=值
您可以使用
json
模块保存字典

导入json
jsonData=json.dumps(字典)
使用open(“output.json”,“w”):

您可以使用递归从字典中获取和设置:

def getNestedItem(字典,路径):
如果len(路径)>1:
返回getNestedItem(字典[路径[0]],路径[1:]
其他:
返回字典[路径[0]]
def setNestedItem(字典、路径、值):
如果len(路径)>1:
setNestedItem(字典[path[0]],路径[1:],值)
其他:
字典[路径[0]]=值
您可以使用
json
模块保存字典

导入json
jsonData=json.dumps(字典)
使用open(“output.json”,“w”):

是的,这就是我想要的post@reportgunner考虑到这是一次重复投票,以重复投票结束。以前的问题已经有4-5种不同的解决方案,它们以不同的方式处理角落案例等,因此我在@GiacomoAlzetta做了很多事情,但我也想让用户得到一个具体的答案。是的,这就是我想要的post@reportgunner考虑到这是一次重复投票,以重复投票结束。以前的问题已经有4-5种不同的解决方案,它们以不同的方式处理角落案例等,因此我在@GiacomoAlzetta上做了很多工作,但我也想让用户找到一个具体的答案。