Wie ordne ich ein wiederholtes Feld zu?

88

Ich verwende Protokollpuffer in Python und habe eine PersonNachricht

repeated uint64 id

aber wenn ich versuche, ihm einen Wert zuzuweisen, wie:

person.id = [1, 32, 43432]

Ich erhalte die Fehlermeldung: Assigment not allowed for repeated field "id" in protocol message object Wie ordne ich einem wiederholten Feld einen Wert zu?

PaolaJ.
quelle

Antworten:

118

Gemäß der Dokumentation können Sie einem wiederholten Feld keine direkte Zuordnung zuweisen. In diesem Fall können Sie aufrufen extend, um alle Elemente in der Liste zum Feld hinzuzufügen.

person.id.extend([1, 32, 43432])
Tim
quelle
11
Verwenden Sie zum Hinzufügen eines einzelnen Werts append()z person.id.append(1). Dies gilt für alle Protobuf- repeated Felder.
Hindol
17
appendfunktioniert nicht, wenn das Feld eher ein Nachrichtentyp als ein Rohtyp ist (wie Zeichenfolge, int32 usw.). extendfunktioniert für Nachrichtentypen.
Abeboparebop
4
Wenn Sie ein Feld für wiederholte Nachrichtentypen überschreiben möchten, müssen Sie es zuerst löschen und dann erweitern. del person.siblings[:] person.siblings.extend([Person(), Person()])
Neil
1
Denken Sie daran, die Argumente als Array (oder Liste) zu übergeben und sie bei Bedarf in Klammern zu setzen!
Nicholas Gentile
33

Wenn Sie es nicht erweitern, sondern vollständig überschreiben möchten , können Sie Folgendes tun:

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

Dieser Ansatz wird auch dazu beitragen, das Feld vollständig freizumachen:

del person.id[:]
Kirpit
quelle
3
Bei wiederholten zusammengesetzten Typen können Sie person.id [:] = [xxx] nicht verwenden, um Ersetzen zuzuweisen. Sie müssen sie zuerst alle löschen und dann verlängern
ospider