TypeError: аргумент int() должен быть строкой, байтоподобным объектом или числом, а не ‘map’

#arrays #python-3.x #numpy #dictionary #arcpy

#массивы #python-3.x #numpy #словарь #arcpy

Вопрос:

У меня возникли проблемы с запуском этого кода, и я получаю следующую ошибку:

 strucArray = np.array(arrayTuple, np.dtype([('inSeqNum', np.int), (lstVals[0], np.float)]))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'map'
  

Это блок кода:

 seqnum = None
lstFile = open(inListFileName)

for lstLn in lstFile.readlines():
    lstVals = lstLn.strip().split()

    basePath=os.getcwd()
    file=os.path.join(basePath, 'OUT_ST',lstVals[1])

    if len(lstVals) > 1:
        loadArray = np.loadtxt(file).flatten()

        if seqnum is None:
            seqnum = np.arange(1, len(loadArray)   1)
    
        arrayTuple = map(tuple, np.column_stack((seqnum, loadArray)))
        
        strucArray = np.array(arrayTuple, np.dtype([('inSeqNum', np.int), (lstVals[0], np.float)]))
    
        arcpy.da.ExtendTable(target, seqFieldName, strucArray, 'inSeqNum', False)

lstFile.close()
  

Комментарии:

1. В Python3 map не вычисляет его значения; он просто устанавливает сопоставление. list(map...) требуется для фактического выполнения сопоставления.

Ответ №1:

Я думаю, вам просто нужно добавить приведение списка к этой строке:

 strucArray = np.array(arrayTuple, np.dtype([('inSeqNum', np.int), (lstVals[0], np.float)])
  

К этому:

 strucArray = np.array(list(arrayTuple), np.dtype([('inSeqNum', np.int)`, (lstVals[0], np.float)]))