python - 字典的值依赖于/链接到 Python 中另一个字典的值
问题描述
我需要创建一个字典,其值依赖于/链接到 Python 中另一个字典的值。
最小工作示例:
from pprint import pprint
import os
miscellaneous = {'input_dir': "Results/Job_test/Input/",
'output_dir': "Results/Job_test/Output/",
'file_name_basis': "truss",
'file_name_extension_input': ".input",
'file_name_extension_output': ".output",
'screen_width_to_height_ratio': 16 / 9}
postprocessing = {'archive': {'execute': False,
'type': 'xztar',
'file_name_basis': miscellaneous['file_name_basis'],
'file_name_extension': ".tar.xz",
'output_dir': miscellaneous['output_dir'],
'directory_to_archive': "."}}
# Input_definition, final assembly.
input_def = {'miscellaneous': miscellaneous,
'postprocessing': postprocessing}
pprint(input_def)
miscellaneous.update({'output_dir': "I_made_it/"})
print("================================================================================")
pprint(input_def) # Only input_def['miscellaneous']['output_dir'] changed, but not input_def['postprocessing']['archive']['output_dir'].
我应该改变什么,不仅input_def['miscellaneous']['output_dir']
改变,I_made_it/
而且input_def['postprocessing']['archive']['output_dir']
改变I_made_it/
?
解决方案
'output_dir': miscellaneous['output_dir'],
减速和定义中的表达式在postprocessing
赋值时进行评估 - 不保留状态。
为了拥有状态,您可以使用对象。一个小的工作示例可能是:
class MyOutputDir(object):
outputDir = ""
outputDirInstance = MyOutputDir()
outputDirInstance.outputDir = "This is one value"
d1 = {"o1": outputDirInstance}
d2 = {"o1": d1["o1"]}
print(d2["o1"].outputDir)
# prints: 'This is one value'
d2["o1"].outputDir = "Another, newer value"
print(d1["o1"].outputDir)
# prints: 'Another, newer value'
要阅读有关 python 中的类和对象的更多信息,请参阅https://docs.python.org/3.7/tutorial/classes.html:那里可能有更多您可能会觉得有用的信息,因为您似乎正在“拉伸”限制dicts(数据)应该做什么,你可能应该考虑一种更面向对象的方法。
祝你好运 :)
推荐阅读
- excel - Excel 平均每 4 个数字
- javascript - 如何在打字稿中对列进行求和并以角度 8 调用它
- windows - 在没有 .lib 文件的程序集中调用 DLL 的导出函数
- excel - DAX 公式适用于 Power BI,但不适用于 Power Pivot
- php - 在 codeigniter 的路由中使用 HTTP 动词不会加载控制器
- node.js - 获取有关我的频道的数据(YouTube 数据 API v3 + Node.js)
- ios - 无法更新 XCode:需要 MacOS 10.15.4 或更高版本
- swiftui - 在 SwiftUI 的 TabView 中显示选定的选项卡
- linux - 在命令行中使用单引号作为密码
- c++ - 在不打开外部程序/窗口 C++ 的情况下获取 ping