использование словаря для получения сопоставленных значений

#python #dictionary

#python #словарь

Вопрос:

У меня ситуация, когда возможны замены элементов. Скажем:

 mapping = {904:905, 905:906}
  

Существует фрейм данных, в котором у меня есть количества для каждого из элементов, описанных выше. Если фрейм данных такой, как показано ниже:

 904 0kg
905 10kg
906 15kg
  

когда 904 есть 0 , я хочу, чтобы функция получала сопоставленное значение 904 , которое равно 905 (10 кг)

если 905 также имеет 0kg значение, то функция должна получить 906 ( 15kg )

до сих пор я пробовал, как показано ниже

 mapping={904:905,905:906}
map=mapping[904]
on_hand_qty = oh_df['ON_HAND'][oh_df['WH_ITEM_CODE']==904].values
print(on_hand_qty)
if on_hand_qty==0:
    on_hand_qty=oh_df['ON_HAND'][oh_df['WH_ITEM_CODE']==map].values
print(on_hand_qty)
  

Я хочу, чтобы это условие if выполнялось до тех пор, пока on_hand_qty не равно нулю

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

1. хорошо, можете ли вы показать нам свой код, который у вас есть на данный момент?

2. В чем ваш вопрос и что вы пытаетесь сделать? Почему 904 0kg? Это тоже в dict? В какой части 904 0? Это тоже в еще одном dict? Означает ли 0 0kg или что-то еще? Самое главное, что вы пробовали до сих пор и с какой конкретной проблемой вы столкнулись и нуждаетесь в помощи?

3. 904 0kg — это ситуация, когда элемент 904 имеет ненулевое значение, мне не нужно запускать код. Когда элемент имеет значение 0 кг, я хочу использовать сопоставление и получить значение из сопоставленного элемента. в этом случае я бы получил отображение 904, которое равно 905, и значение должно быть обновлено до 10 кг.

4. Возможно, вы ищете while цикл?

5. может while ли цикл решить эту задачу? Я попробую. спасибо за это предположение

Ответ №1:

 while on_hand_qty==0:
    on_hand_qty=oh_df['ON_HAND'][oh_df['WH_ITEM_CODE']==x].values
    print(on_hand_qty)
    if on_hand_qty>0:
        break
    else:
        x=mapping[x]
  

Это решило проблему.