Типы словаря OrderedDict поддерживают дефисы:
https://docs.python.org/2/library/collections.html#ordereddict-objects
Похоже, это побочный эффект от реализации OrderedDict. Обратите внимание, что пары ключ-значение фактически передаются как наборы. Могу поспорить, что реализация OrderedDict не использует «ключ», переданный в наборе, в качестве истинного ключа, таким образом обходя эту проблему
Поскольку это побочный эффект от реализации OrderedDict, возможно, вы не хотите на это полагаться. Но это работает.
from collections import OrderedDict
my_dict = OrderedDict([
('has-dash', 'has dash value'),
('no dash', 'no dash value')
])
print( 'has-dash: ' + my_dict['has-dash'] )
print( 'no dash: ' + my_dict['no dash'] )
Результат:
has-dash: has dash value
no dash: no dash value