He estado tratando de encontrar una manera de llamar a los nombres de campo de un zip(). Básicamente tengo 12 campos llamados "Flw_days1", "Flw_days2" etc y los correspondientes campos "Depth" que necesitan ser calculados usando las entradas de los campos "Flw_days". Es decir, "Profundidad1" se calcula utilizando "Flw_Days1" y así sucesivamente.
He utilizado la función zip() para combinarlos y luego he intentado incluirlos en un bloque de código y una expresión para utilizarlos en la calculadora de campos.
Véase el ejemplo siguiente:
depth_fields = ["Depth1", "Depth2", "Depth3", "Depth4", "Depth5", "Depth6", "Depth7", "Depth8", "Depth9", "Depth10", "Depth11", "Depth12"]
flow_fields = ["!Flw_Day1!", "!Flw_Day2!", "!Flw_Day3!", "!Flw_Day4!", "!Flw_Day5!", "!Flw_Day6!", "!Flw_Day7!", "!Flw_Day8!", "!Flw_Day9!", "!Flw_Day10!", "!Flw_Day11!", "!Flw_Day12!"]
zipped = zip(sorted(depth_fields), sorted(flow_fields))
for input in zipped:
codeblock = """
def depth(flow, kfc, rf):
if kfc == 0 or rf == 0:
return ""
else:
return (flow * (kfc / rf) + 2)
"""
expression = "depth(input[0], !K_FC!, !Ret_Fact!)"
arcpy.CalculateField_management(CMPP_fc, input[1], expression, "PYTHON_9.3", codeblock)
Como puede ver, he intentado llamar al campo "Flw_Days" en la expresión y al campo "Depth" en la calculadora de campos.
El error que obtengo es:
Runtime error <class 'arcgisscripting.ExecuteError'>: ERROR 000539: Error running expression: depth(input[0], 0, 0) <type 'exceptions.TypeError'>: 'builtin_function_or_method' object is unsubscriptable Failed to execute (CalculateField).
Así que parece ser la llamada a la entrada [0] en la expresión que está causando el problema.
Utilizo ArcGIS Desktop 10.