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?

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])

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[:]

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.