Estoy etiquetando los invertidos de las alcantarillas utilizando python y ArcMap 10.3. Cuando utilizo un diccionario para controlar el orden de las etiquetas, algunos pozos no imprimen todas las inversiones mientras que otros sí lo hacen. Puedo publicar información de campo / tabla de atributos si es necesario. Sospecho que es un error de mi parte al usar un campo vacío/no en el diccionario y la tabla hash subyacente, pero realmente no sé lo suficiente para decirlo con confianza.
¿Cómo puedo conseguir que se muestren todos los invertidos? - ¿hacer una comprobación en cada argumento para ver si es ninguno o "" antes de insertarlo en el diccionario?
Expresión de la etiqueta de trabajo:
Creo que aquí dict
se establece una lista con valores agrupados (key,value),(key,value),etc
y todo funciona correctamente:
import json
def FindLabel ( [Elevation] , [Out_Elev] , [Out_Loc] , [In1_Elev] , [In1_Loc] , [In2_Elev] , [In2_Loc] , [In3_Elev] , [In3_Loc] ):
dict = ([Out_Elev],[Out_Loc]),([In1_Elev],[In1_Loc]),([In2_Elev],[In2_Loc]),([In3_Elev],[In3_Loc])
x = json.dumps(dict, sort_keys=True)
return x
Expresiones de etiquetas que no funcionan:
Las dos imágenes siguientes muestran cómo intento utilizar un diccionario. Esta primera está cambiando dict
de una lista a un diccionario utilizando dict = OrderedDict(dict)
y la segunda es la de establecer directamente un diccionario utilizando dict = {key:value,key:value,etc}
. No entiendo por qué se muestran los 3 inversores para la arqueta de la parte superior de la imagen pero no para la de abajo a la izquierda.
Utilizando dict = OrderedDict(dict)
from collections import OrderedDict
import json
def FindLabel ( [Elevation] , [Out_Elev] , [Out_Loc] , [In1_Elev] , [In1_Loc] , [In2_Elev] , [In2_Loc] , [In3_Elev] , [In3_Loc] ):
dict = ([Out_Elev],[Out_Loc]),([In1_Elev],[In1_Loc]),([In2_Elev],[In2_Loc]),([In3_Elev],[In3_Loc])
dict = OrderedDict(dict)
x = json.dumps(dict, sort_keys=True)
return x
Otra variante de código en la que no se muestran las inversiones utilizando dict = {key:value,key:value,etc}
import json
def FindLabel ( [Elevation] , [Out_Elev] , [Out_Loc] , [In1_Elev] , [In1_Loc] , [In2_Elev] , [In2_Loc] , [In3_Elev] , [In3_Loc] ):
dict = {[Out_Elev]:[Out_Loc],[In1_Elev]:[In1_Loc],[In2_Elev]:[In2_Loc],[In3_Elev]:[In3_Loc],}
x = json.dumps(dict, sort_keys=True)
return x