5 votos

Apilados Etiqueta utilizando If/Else en una Expresión de Etiqueta

Tengo un gran conjunto de datos con los resultados de laboratorio que estoy buscando a la etiqueta en ArcMap. Estoy tratando de construir una expresión de etiqueta que se necesita para producir una etiqueta que, básicamente, se debe tener este aspecto:

B=5
T=10
E=200

Así que si B [BEN] es >= a 5, se va a producir un texto que está en negrita y de color rojo. Si B es < 5, que verá la luz verde, y si es que nada más salir a B=ND. Este es el código que tengo hasta ahora para hacer eso, y funciona:

def FindLabel ([BEN]):

 if float([BEN]) >= 5:
  return "<CLR red='255'><FNT size = '8'><BOL>" + "B=" + [BEN] + "</BOL></FNT></CLR>"

 elif float([BEN]) < 5:
  return"<CLR green='255'><FNT size = '8'>" + "B=" +  [BEN] + "</FNT></CLR>"

 else:
  return  "<CLR green='255'><FNT size = '8'>" + "B=ND" + "</FNT></CLR>"

El problema es que también tengo que hacer esto para los compuestos T, E, y así sucesivamente...Si yo no quería usar el if/else sería sencillo, yo podría usar algo como:

return "B=" + [BEN] + "\n" + "E=" + [ETH] + "\n" + "T" + [TOL] + "\n" + "I=" +  [ISO]

Yo, básicamente, se necesita tener etiquetas apiladas (como se muestra arriba), mientras que el uso de las instrucciones If/then, y estoy muy de supresión sobre cómo hacer esto.

8voto

jomey Puntos 302

Usted podría intentar algo como lo siguiente.

def FindLabel ([BEN],[ETH],[TOL],[ISO]):

    vars = {"B":[BEN],"E":[ETH],"T":[TOL],"I":[ISO]}
    labelStrings = []

    for k,v in vars.items():
        if float(v) >= 5:
            labelStrings.append("<CLR red='255'><FNT size = '8'><BOL>{0}={1}</BOL></FNT></CLR>".format(k,v))
        elif float(v) < 5:
            labelStrings.append("<CLR green='255'><FNT size = '8'>{0}={1}</FNT></CLR>".format(k,v))
        else:
            labelStrings.append("<CLR green='255'><FNT size = '8'>{0}=ND</FNT></CLR>".format(k))
    return "\n".join(labelStrings)

Sólo un pensamiento, no Hay ninguna comprobación de errores en este código así que si usted tiene una cadena que no puede ser convertido a un flotador tendrás problemas

EDITAR:

SI son constantes que se les compare usted puede probar esto (yo usé arbitraria constantes para la comparación de los valores):

def FindLabel ([BEN],[ETH],[TOL],[ISO]):

    vars = {"B":[BEN],"E":[ETH],"T":[TOL],"I":[ISO]}
    varConstants= {"B":5,"E":6,"T":20,"I":50}
    labelStrings = []

    for k,v in vars.items():
        if float(v) >= varConstants[k]:
            labelStrings.append("<CLR red='255'><FNT size = '8'><BOL>{0}={1}</BOL></FNT></CLR>".format(k,v))
        elif float(v) < varConstants[k]:
            labelStrings.append("<CLR green='255'><FNT size = '8'>{0}={1}</FNT></CLR>".format(k,v))
        else:
            labelStrings.append("<CLR green='255'><FNT size = '8'>{0}=ND</FNT></CLR>".format(k))
    return "\n".join(labelStrings)

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