HalloItsMe 2022-08-12 18:54 采纳率: 100%
浏览 31
已结题

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]))的效果。感谢!

  • 写回答

1条回答 默认 最新

  • 天际的海浪 2022-08-12 21:07
    关注

    改成
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月21日
  • 已采纳回答 8月13日
  • 赞助了问题酬金10元 8月12日
  • 创建了问题 8月12日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备