python - 从一组对象值的排列生成 JSON 配置文件
问题描述
我正在尝试为我的程序创建一组 JSON 配置文件。我通常将 JSON 文件传递到命令行并运行我的模拟。问题是我想探索很多参数,并且我想为每组参数创建一个配置文件。例如,如果我的配置文件如下所示:
{
"A": x,
"B": "Green",
"C": {
"c_a": "O2",
"c_b": y
}
}
}
我想为每个键迭代一组值,例如x = [1, 2, 3]
和y = [5, 6, 7]
。我想要一个解决方案,用户可以在顶部定义所有参数,JSONnet 在不同文件中生成所有组合。
我对 JSONnet 有点熟悉,我知道我可以拥有函数并且基本上为每个键传递不同的值并拥有一个新的 json 文件。但这不是很可扩展,而且我的配置文件是嵌套的,这使得一切都变得更加复杂,而且这种方法并不能真正解决参数的排列问题。
我已经用一个生成排列表的shell脚本解决了这个问题,然后将每一行作为输入传递给jsonnet,但我认为应该有更好的方法。
编辑:如果有办法使用 JSONnet Python 绑定来实现这一点,那也可以。
解决方案
你的意思是这样的:
import json
import itertools
params_info = {
"x": [ 1, 2, 3],
"y": [ "a", "b", "c"],
"z": [ "A", "B", "C"],
}
for param_vals in itertools.product(*params_info.values()):
params = dict(zip(params_info.keys(), param_vals))
data = {
"A": params["x"],
"B": "Green",
"C": {
"c_a": "O2",
"c_b": params["y"],
"c_c": ["D", "E", "F", params["z"]]
}
}
jsonstr = json.dumps(data) # use json.dump if you want to dump to a file
print(jsonstr)
# add code here to do something with json
推荐阅读
- file - ValueError:文件路径或缓冲区对象类型无效:
- javascript - 服务器中css和js的变化,不适用于网站
- java - 如何在 Android 的 Firebase DB 中设置布尔值
- multithreading - 从线程获取HashMap
- wso2is - SCIM 2.0 过滤器表达式 - 不能使用“或”表达式
- c# - 同步绑定到同一个集合和同一个选定项的两个组合框
- postgresql - 有效地将点分配给多边形
- c - 如何将一个简单的树写入文件并将其读回?
- ionic-framework - 在 Ionic 4 中使用 Camera Native 获取后图像未显示
- authentication - 对 API 服务器使用 ID 令牌或访问令牌