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

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日

悬赏问题

  • ¥15 Delphi DBGrid弹出菜单问题
  • ¥15 java map类型数据格式,如何快速通过前缀匹配元素
  • ¥15 stc12c5a60s2、QMC5883L、LCD1602组合测量磁场所需程序
  • ¥15 vba参数转c++ SAFEARRAY
  • ¥20 Win11测试yolov4,“找不到nvcuda.dll”怎么办?
  • ¥15 simulink绘制bode图
  • ¥15 php_network_getaddresses: getaddrinfo failed: Name or service not known
  • ¥15 用msg发消息出现的问题
  • ¥15 unity3d机械臂
  • ¥20 判断两个表是否完全相同