MatLab setfield转到python中

问题遇到的现象和发生背景

我在改写MatLab代码为Python代码过程中遇到setfield(S, field, value)难以转化的问题。MatLab中的structure array field我用的dict代替。

问题相关代码

new = argv{argc+1};
f = fieldnames(new);
opt = setfield(opt.f{1},getfield(new,f{1}));

上述matlab代码我是这么替换的:

new = {}
new = argv[argc]
f = list(new.keys())
opt.update(f[0]=new.get(f[0]))
运行结果及报错内容

opt.update(f[0] = new.get(f[0]))
^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

我的解答思路和尝试过的方法

改成==显然没有用处。我也试过用opt[f[0]]=new.get(f[0])),也是同样的报错。然后试过用另一个变量替换它。结果是直接在原dict基础上增加了一个新的。以下是在IDELE里尝试的例子:

listK=list(new.keys())
field=listK[4]
new.update(field=new.get(listK[0]))
new

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'field': 1}

我想要达到的结果

求问各位怎么能够实现原有的opt.update(f[0]=new.get(f[0]))的效果。感谢!

改成
opt.update({f[0]:new.get(f[0])})
或者
opt[f[0]]=new.get(f[0])

你题目的解答代码如下:

opt = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
new = {'a': 123}
f = list(new.keys())
opt.update({f[0]:new.get(f[0])})
# opt[f[0]]=new.get(f[0])
print(opt)

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img