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.