Проверка наличия ключа в dict из list

Подскажите, мне нужно из list проверить, есть ли такой ключ в словаре

у меня есть функция, где я в list добавляю нужные мне значения

ngram.append(text[i:i + n]) 

затем мне нужно добавить эти значения из списка в словарь как ключ и присвоим им значение 0.0, если ключ уже есть, то просто продолжить дальше

for key in ngram:
    if key in current_dict:
        continue
    current_dict[key] = 0.0

но получаю ошибку

TypeError: unhashable type: 'list'

пример: ngram=['ab','bc','sd','ab'], а нужно получить current_dict={'ab':0.0; 'bc':0.0; 'sd':0.0}

п.с. больше всего мне не понятно, что это работает, хотя text тоже list

for key in text:
    if key in current_dict:
        current_dict[key] += 1

Ответы (2 шт):

Автор решения: Zhihar

в словаре есть замечательный метод get(), в котором можно указывать значение по умолчанию и тогда можно сделать такой трюк:

for key in ngram:
    current_dict[key] = current_dict.get(key, 0.0)

вообще если вам надо инициализировать словарь, то ничего не мешает сделать прямо в лоб:

current_dict = dict((key, 0.0) for key in ngram)

вы получите то, что требуется

касательно приведенного кода:

for key in text:
    if key in current_dict:
        current_dict[key] += 1

то скорее всего имеется в виду подсчет кол-ва встречающихся значений в списке и тогда корректно это делать так:

current_dict = dict()
for key in ngram:
    current_dict[key] = current_dict.get(key, 0) + 1

т.е. такой код подсчитает кол-во вхождений значений в список и сформирует словарь

→ Ссылка
Автор решения: Be3y4uu_K0T

Вы можете использовать метод dict.setdefault ссылка.

for key in ngram:
    current_dict.setdefault(key, 0.0)

Также для решения Вашей проблемы Вы можете использовать collections.defaultdict ссылка.

from collections import defaultdict

current_dict = defaultdict(float)

for key in text:
    current_dict[key] += 1
→ Ссылка