Mehr

Wie füge ich das Extent-Objekt an vorhandene Wörterbuchschlüsselwerte an?

Wie füge ich das Extent-Objekt an vorhandene Wörterbuchschlüsselwerte an?


Ich habe ein Wörterbuch, dessen Schlüssel Kartensegmentnamen sind und dessen Wert eine Liste von drei Feldwerten ist.

Mit einem arcpy.da.SearchCursor auf dem FeatureLayer der Kartensegmente habe ich das Ausdehnungsobjekt und die Namen für die Segmente extrahiert.

Unter Verwendung der ähnlichen Kartensegmentnamen möchte ich die Ausdehnungswerte an die Wörterbuchschlüssel anhängen (damit ich später darauf verweisen kann). Wie würde ich das tun, Sie können ein Extent-Objekt nicht indizieren.

zum Beispiel:

{'m32': [7, 10, 13], 'm33': [7, 10, 13]}…

verwandelt sich in etwas wie:

{'m32': [7, 10, 13,XMin,Ymin,XMax,YMax], 'm33': [7, 10, 13,XMin,Ymin,XMax,YMax]}…

damit ich beim Indizieren den Schlüssel, die Originalwerte und die Extent-Werte indizieren kann.


Um einem Python-Listenobjekt neue Elemente hinzuzufügen, verwenden Sie append. Die grundlegende Syntax ist list.append(addedItem). Bei einem Wörterbuch, das eine Liste enthält, ist es Dictionary(key).append(addedItem).

Hier ist ein Skriptskelett, das ein Wörterbuch erstellt, das eine Liste von Listen als Wert hat:

# Setze Feature-Class-Variable relatedFC = r"C:UsersOWNERDocumentsArcGISCenterline_Edit.gdbCL_INTERSECTIONS_PAIRS" # Erstellen Sie eine Feldliste mit dem entsprechenden Feld zuerst (ROUTE_NAME), # gefolgt von Sortierfeld(en) (MEASURE ), dann label field(s) (CROSS_STREET) relatedFieldsList = ["ROUTE_NAME", "MEASURE", "CROSS_STREET"] # Verarbeite einen da-Suchcursor, um die Daten mit arcpy.da.SearchCursor(relateFC, relatedFieldsList) as relationRows: für relationRow in relatedRows: # den Schlüsselwert in einer Variablen speichern, damit der Bezugswert nur einmal aus der Zeile gelesen wird, was die Geschwindigkeit verbessert # den Schlüssel erstellen und seinen Wert zu einer Liste mit Feldwerten machen, falls nicht relationKey in relationDict: # [searchRow[1:]] ist eine Liste, die # eine Liste der Feldwerte nach dem Schlüssel enthält. relationDict[relateKey] = [relateRow[1:]] else: # wenn der Beziehungsschlüssel bereits im Wörterbuch vorhanden ist # die nächste Liste von Feldwerten an die # vorhandene Liste anhängen, die mit dem Schlüssel verknüpft ist relationDict[relateKey].append(relateRow[ 1:])