如何从python中重复的protobuf字段中删除项目?

时间:2013-03-09 04:16:34

标签: python protocol-buffers

我有一个包含重复字段的protobuf消息。我想删除列表中的一个项目,但我似乎无法找到一个好方法,不将重复字段中的所有项目复制到列表中,清除重复字段,然后重新填充它。

在C ++中有一个RemoveLast()函数,但这似乎没有出现在python API中......

3 个答案:

答案 0 :(得分:12)

documentation中所述,Protobuf中包含重复字段的对象的行为类似于常规Python序列。因此,你应该能够简单地做到

del foo.fields[index]

例如,要删除最后一个元素,

del foo.fields[-1]

答案 1 :(得分:1)

在Python中,可以通过以下方式删除列表中的元素:

list.remove(item_to_be_removed)

del list[index]

答案 2 :(得分:0)

const google::protobuf::Descriptor  *descriptor = m_pMessage->GetDescriptor();
const google::protobuf::Reflection  *reflection = m_pMessage->GetReflection();
const google::protobuf::FieldDescriptor* field = descriptor->FindFieldByName("my_list_name");
if (i<list_size-1)
{
    reflection->SwapElements(m_pMessage, field, i, list_size-1);
}
reflection->RemoveLast(m_pMessage, field);