Проверка наличия ключа в 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 шт):
в словаре есть замечательный метод 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
т.е. такой код подсчитает кол-во вхождений значений в список и сформирует словарь
Вы можете использовать метод 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