如何分配重复字段?


88

我在python中使用协议缓冲区,并且有一条Person消息

repeated uint64 id

但是当我尝试为它赋值时:

person.id = [1, 32, 43432]

我收到一个错误:Assigment not allowed for repeated field "id" in protocol message object 如何为重复字段分配值?

Answers:


118

根据文档,您不能直接分配给重复的字段。在这种情况下,您可以调用extend将列表中的所有元素添加到字段中。

person.id.extend([1, 32, 43432])

11
同样,要添加单个值,请使用append(),例如person.id.append(1)。这适用于所有 protobuf repeated字段。
Hindol

17
append如果该字段是消息类型而不是原始类型(例如字符串,int32等),则不起作用。extend确实适用于消息类型。
abeboparebop

4
如果要覆盖重复的消息类型字段,则需要先删除然后扩展。del person.siblings[:] person.siblings.extend([Person(), Person()])
尼尔,


1
请记住传入参数以将其扩展为数组(或列表),并在需要时用方括号括起来!
Nicholas Gentile

33

如果您不想扩展但将其完全覆盖,则可以执行以下操作:

person.id[:] = [1, 32, 43432]

这种方法也将彻底清除该领域:

del person.id[:]

3
对于重复的复合类型,不能使用person.id [:] = [xxx]分配替换。您必须先全部删除它们,然后再扩展
ospider '19

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.