python - Python - 从字典和列表混合中更改值
问题描述
我试图找到一种方法来替换可能包含数组作为值的复杂字典中的值。一个例子如下所示
{
"ip1": "172.16.1.54",
"ip2": "172.16.1.100",
"no": 6,
"config": [
{
"num": 1,
"sno": 1,
"st_conf": [
{
"frames": 1000,
"id": 1,
"vid": 1000,
"mc1": "00 00 00 00 00 01",
"mc2": "00 00 00 00 00 02"
},
{
"frames": 2000,
"id": 3,
"vid": 1300,
"mc1": "00 00 00 00 00 11",
"mc2": "00 00 00 00 00 12"
},
]
},
{
"port_no": 2,
"sw_port_no": 2,
"stream_config": [
{
"frames": 1000,
"id": 1,
"vid": 1000,
"mc1": "00 00 00 00 00 02",
"mc1": "00 00 00 00 00 01"
}
]
}
]
}
我编写了如下函数来修改某个路径(例如port_config/0/st_conf/0/id
)中的值,如下所示
def set_data_in_path(self, path, data):
tokens = path.split("/")
tmp_conf = self._def_conf
for token in tokens:
if self.is_int(token):
token = int(token)
tmp_conf = tmp_conf[token]
tmp_conf = data
但是这个功能不起作用。谁能帮我?我的代码有什么问题以及如何解决它。因为我没有太多的python经验。
解决方案
通过最终分配tmp_conf
一个标量值,您将失去对数据结构的引用,并且data
您随后分配给的值tmp_conf
将不会反映到原始数据结构中。
您应该tmp_conf
避免到达最后一个令牌指定的节点,而是分配data
给tmp_conf
由最后一个令牌索引的节点:
def set_data_in_path(self, path, data):
tokens = path.split("/")
tmp_conf = self._def_conf
for token in tokens[:-1]:
if self.is_int(token):
token = int(token)
tmp_conf = tmp_conf[token]
tmp_conf[tokens[-1]] = data
推荐阅读
- python - 当数组未初始化时,哪种是创建数组堆栈的最佳方式?
- load-testing - 炮兵从有效载荷文件中重复同一行
- facebook - 有没有办法通过 Facebook Marketing API 禁用预算优化?
- typescript - 使用多个中间件时在 redux 存储上正确键入 dispatch
- java - 颤振中任务':geolocator_android:compileDebugJavaWithJavac'的执行失败
- reactjs - React-传单我可以从公共文件夹中导入图标,但不能从组件文件夹中导入
- c - libtermkey 在纯文本模式终端中不报告鼠标事件
- java - 尽管没有问题,但没有返回任何东西 public static int
- swift - 使用 Swift 中的新并发将同步函数转换为异步
- assembly - 有没有办法将浮点立即分配给寄存器