Python Protocol Buffers中是否有Map Fields的复制构造函数?

时间:2018-02-07 20:05:41

标签: python protocol-buffers

Python Generated Code解释了Python中大多数protobuf map fields的使用案例,但没有解释如何将一个地图复制到另一个地图。

给出简单的地图

message Src {
    map<string, string> properties = 1;
    ...
}

message Dst {
    map<string, string> properties = 1;
    ...
}

您无法为嵌入的消息字段分配值,因此无法执行以下操作:

# Will not work.
dst = Dst()
dst.properties = src.properties

也没有CopyFrom的实现,因为map本身不是一条消息,它是消息中的一个字段。

# Will not work.
dst = Dst()
dst.properties.CopyFrom(src.properties)

我也无法复制整个邮件,因为我只想要地图。

# Copies unwanted fields!
dst = Dst()
dst.CopyFrom(src)

我希望我不必迭代所有键并逐个分配!

# Iterate over map keys
for key in src.properties:
    dst.properties[key] = src.properties[key]

1 个答案:

答案 0 :(得分:1)

python protobuf生成的代码中的map字段与python dicts非常相似,所以你可以使用.update()来复制:

dst.properties.update(src.properties)