6 votos

¿Escribir bloque de código Python en calculadora de campo?

Yo soy un novato en Python como bien ha de tener una mínima experiencia con ArcMap. Actualmente estoy usando un Censo de los Estados Unidos de TIGRE archivo, la cartografía de carreteras en el Condado de Harris, TEXAS. Quiero añadir un campo nuevo llamado de la VELOCIDAD, que devolverá una velocidad asociada con el MTFCC cadena (MTFCC es la columna que clasifica el tipo de carretera. por ejemplo, S1400, S1200, etc.).

Abrí la tabla de atributos, se agregó un nuevo campo de VELOCIDAD, clic en el Campo de la Calculadora de la velocidad de la columna, y se inserta mi propio código de Python. Me aseguré de que haga clic en Python (no VB), y tengo mi valor devuelto un número. Mi código es el siguiente...

def SpeedCalc(MTFCC):
 if MTFCC == "S1400":
      return 25

 elif MTFCC == "S1200":
      return 45

 elif MTFCC == "S1100":
      return 65

 elif MTFCC == "S1630":
      return 25

 elif MTFCC == "S1730":
      return 15

 else:
      return 9999 

De hecho estoy seguro que por debajo de donde 'VELOCIDAD =' es tener "SpeedCalc(!MTFCC!) por escrito. No se producen errores, pero todos mis columnas se muestran como 0. No tengo derechos administrativos a mi equipo de trabajo o de lo contrario me iba a insertar el código en Python primero y ver lo que está mal. Hasta donde yo sé, mi sintaxis es correcta y se ejecuta la sentencia, pero no se hace nada. MTFCC aparecen como cadenas en la ficha propiedades.

14voto

Gavin Schulz Puntos 592

He encontrado que a veces necesito para incluir a un solo return más que en cada if/elif/else (no sé por qué este es el caso, pero ha ocurrido lo suficiente como para ahora ser mi ir a). Pruebe a establecer una variable y devolver sólo de esa variable en la final.

Codeblock:

def SpeedCalc(MTFCC):
    x = 9999
    if MTFCC == "S1400":
        x = 25
    elif MTFCC == "S1200":
        x = 45
    elif MTFCC == "S1100":
        x = 65
    elif MTFCC == "S1630":
        x = 25
    elif MTFCC == "S1730":
        x = 15
    return x

Expresión:

SpeedCalc(!MTFCC!)

Alternativamente crear un diccionario de python para almacenar su búsqueda y valores de retorno, y devolver los valores de eso.

Codeblock:

def SpeedCalc(MTFCC):
    myDict = {'S1400': 25, 'S1200': 45, 'S1100': 65, 'S1630': 25, 'S1730': 15}
    x = 9999
    if MTFCC in myDict:
        x = myDict[MTFCC]
    return x

Expresión:

SpeedCalc(!MTFCC!)

Editar

Un usuario ha intentado editar la respuesta con la siguiente - estoy incluyendo este como una opción adicional, sin embargo, en mi experiencia, algunas funciones python simplemente no funcionan bien en la calculadora de campo (como con el único múltiple de vs return valores por encima). También prefiero tener las líneas adicionales, en particular para aquellos que son nuevos en python, ya que es más fácil de leer y entender lo que realmente está sucediendo en el código cuando el aprendizaje.

def SpeedCalc(MTFCC):
    myDict = {'S1400': 25, 'S1200': 45, 'S1100': 65, 'S1630': 25, 'S1730': 15}
    return myDict.get(MTFCC, 9999)

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