Проверьте, присутствует ли значение столбца в значении словаря

#python #pandas #for-loop

#python #pandas #для цикла

Вопрос:

я хочу проверить, присутствует ли colval элемент в values из — dictionary
Если оно присутствует, добавьте соответствующее key этому значению, иначе добавьте colval элемент.

код
Это то, что я сделал

 colormap = []
for col in colval:
    for k,v in master_colors.items():
        for x in v:
            if col == x:
                 colormap.append(k)
            else:
                colormap.append(col)
  

Но это дает мне len(colormap) больше 1000 , чем на самом деле должно быть 45 , что является длиной colval

Ответ №1:

Проблема в том, что colormap.append (col) находится во внутреннем цикле. Для каждого значения colval выполняется итерация по каждому значению в dict master_colors, и каждый раз, когда оно не соответствует этому конкретному значению, добавляется colval. Вместо этого вам нужно подождать, пока вы не выполните итерацию по всему dict и подтвердите, что текущее значение colval не соответствует. Только после этого вы должны добавить это значение colval.

Кроме того, то, как вы написали это сейчас, чувствительно к регистру. Если вы измените обе строки, которые вы сравниваете, на строчные (как показано ниже), это будет работать нормально.

 colormap = []
for col in colval:
    match = False
    for k,v in master_colors.items():
        for x in v:
            if col.lower() == x.lower():
                colormap.append(k)
                match = True
        
    if not match:
        colormap.append(col)
  

Ответ №2:

Вместо последнего (самого внутреннего) цикла for вы должны проверить, есть ли цвет в списке. И если да, то прервите второй цикл.

 colormap = []
for col in colval:
    for k,v in master_colors.items():
        if col.lower() in v:
            colormap.append(k)
            break
    colormap.append(col)
  

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

1. Я уже пробовал не работать .. выдает 900 элементы, которые должны быть 45 только

2. да, нужно добавить разрыв, протестируйте его, теперь работает, 64 элемента в конце