6 votos

Python El etiquetado mediante diccionario no imprime todos los valores

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

Inverts Showing

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)

Inverts not showing

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}

Inverts not showing 2

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

1voto

Mintx Puntos 2627

Parece que accidentalmente es la clave . . En tu primer ejemplo que funciona en la parte inferior izquierda, tienes un lista con valores emparejados:

332.207435 -> South
332.307435 -> North
332.307435 -> West

El Norte y el Oeste tienen el mismo valor clave. Si quieres poner esto en un diccionario La clave debe ser única, de lo contrario sobrescribirá el valor sin crear una nueva clave.

Intenta intercambiar los valores de [Elev] y [Loc] en tu diccionario:

dict = {[Out_Loc]:[Out_Elev],[In1_Loc]:[In1_Elev],[In2_Loc]:[In2_Elev],[In3_Loc]:[In3_Elev],}

0 votos

No estoy seguro de a qué te refieres con el cloqueo de llaves, a veces los invertidos son la misma elevación que es lo que tengo ahí. Pero fue la clave única que hizo el truco. Gracias. El problema ahora es que puedo tener múltiples inversiones en la misma dirección - no es común, pero posible. Quizás pueda imprimir la lista con los pares en lugar de preocuparme por los diccionarios.

0 votos

Sólo por curiosidad, si las listas funcionaban, ¿cuál era la razón para intentar utilizar los diccionarios?

0 votos

Probablemente, la razón principal es que pirateo mis fragmentos de código hasta que funcionan. En segundo lugar, lo que estaba etiquetando tenía sentido con pares clave:valor (invertir y dirección) y me imaginé que un diccionario estaba hecho para eso, así que lo usé. De hecho, cuando me di cuenta de que el código no estaba imprimiendo todas las inversiones en algunos, tuve que trabajar hacia atrás hasta que me di cuenta de que la lista funcionaría.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X