Чтобы ответить на вопрос ", как я могу узнать, было ли заданному индексу в этом dict значение, отличное от None ", я бы предпочел следующее:
try:
nonNone = my_dict[key] is not None
except KeyError:
nonNone = False
Это соответствует уже задействованной концепции EAFP (проще попросить прощения, чем разрешения). Он также избегает поиска дубликатов ключей в словаре, как это было бы в key in my_dict and my_dict[key] is not None
, что интересно, если поиск дорогой.
Для действительной проблемы , которую вы поставили, то есть для увеличения значения int, если оно существует, или установки значения по умолчанию в противном случае, я также рекомендую
my_dict[key] = my_dict.get(key, default) + 1
как в ответе Эндрю Уилкинсона.
Существует третье решение, если вы храните изменяемые объекты в своем словаре. Типичным примером этого является multimap , где вы храните список элементов для ваших ключей. В этом случае вы можете использовать:
my_dict.setdefault(key, []).append(item)
Если значение для ключа не существует в словаре, метод setdefault установит для него второй параметр setdefault. Он ведет себя так же, как стандартный my_dict [ключ], возвращая значение для ключа (которое может быть вновь установленным значением).