Как обрабатывать KeyError при работе со списком внутри списка - PullRequest
0 голосов
/ 18 февраля 2019

Я написал две функции в Python, которые я собираюсь использовать несколько раз.Вместе они позволят мне рассчитать общее расстояние перемещения транспортного средства на складе, собирая товары из определенных мест в одном проходе.

Одна функция get_orderpick извлекает два списка из входных данных в dataFrame и возвращает ихв списке, поэтому возвращаемое предложение выглядит так: return [orderList, pickList].

Когда я запускаю эту функцию в одиночку, я получаю список с двумя списками, хранящимися внутри нее, без проблем.НО, когда я пытаюсь передать это своей следующей функции, я получаю KeyError.

Итак, как я уже упоминал, первая функция get_orderpick работает нормально, вот полный код:

def get_orderpick(df):
    # Produce a standard Python list of the picks
    # DataFrame -> numpy.array -> list

    pickList = df.sku.values.tolist()
    orderList = df.order.values.tolist()

    return [orderList, pickList]

Примечание - orderList - это последовательность пиков, мне нужно отследить, когда автомобиль должен вернуться на базу и начать все сначала при следующем заказе.Он содержит только цифры;pickList - отсек, из которого должен производиться выбор, он определяет, как далеко должен проехать автомобиль для каждого выбора, и содержит одну заглавную букву в каждой записи.

Вот функция вычисления расстояния:

def picking_distance(lists, layout):

    orderList = lists[1] #<------------------ issue here
    pickList = lists[2] 

    totalDistance = 0 # distance
    currentPos = 0  # position
    for i in range(len(pickList)):
        if orderList[i] == 1 and currentPos != 0:
            # new order, return to base
            totalDistance += currentPos
            currentPos = 0
            i -= 1 # begin the pick from base again
        else:
            nextPos = layout[pickList[i]]
            delta = abs(nextPos - currentPos)
            totalDistance += delta
            currentPos = nextPos
    return totalDistance

Я ожидаю, что код выдаст общее пройденное расстояние.Но я получаю KeyError, когда пытаюсь отделить orderList и pickList от списка lists.Я вызываю функции вместе следующим образом:

print(picking_distance(layout, get_orderpick(data)))

Спасибо за вашу помощь!

PS Прохожу через словарь под названием layout на второмфункция.Это определяет расстояние между местами сбора.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Итак ... Я допустил ошибку и переключил свои аргументы при вызове своей собственной функции.

Это означает, что я передавал словарь, в котором функция ожидала список списков.

Переключение аргументов решило проблему, и она прекрасно работает.

print(picking_distance(get_orderpick(data), layout))

Мораль истории

Если вы получаете словарную ошибку, когда выожидайте обработки списков ... вы, вероятно, передаете свои аргументы в неправильном порядке.

Спасибо за ваше время!: D

0 голосов
/ 18 февраля 2019

Если бы вы использовали csv вместо numpy массива, вы могли бы использовать:

with open('array.csv', 'r') as f:
    orderlist, picklist = zip(*(row for row in csv.reader(f)))

Это разделит каждый столбец вашего массива в отдельный список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...