protobuf3,python-如何将元素设置为map <string,othermessage> dict?

时间:2018-10-01 01:08:00

标签: python protocol-buffers

当我尝试设置map<string,Y> dict of X的元素时 引发ValueError。

  

“不允许直接分配子消息”

我的实验代码是

syntax = "proto3";

message X {
  map<string,Y> dict = 1;
}

message Y {
  int32 v = 1;
}

和python代码

x = x_pb2.X()
y = x_pb2.Y()
x.data['a'] = y

然后出现错误

Traceback (most recent call last):
  File "x.py", line 8, in <module>
    x.data['a'] = y
ValueError: Direct assignment of submessage not allowed

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

我想这是最佳使用模式

x = x_pb2.X()
x.data['a'].v = 1

另一个选择是使用CopyFrom

x = x_pb2.X()
y = x_pb2.Y()
y.v=2
x.data['a'].CopyFrom(y)
相关问题