#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 элемента в конце