Вы можете использовать str.maketrans()
.
u'\u2080'
до u'\u2089'
представляют числа от 0 до 9
sub=str.maketrans("0123456789", "₀₁₂₃₄₅₆₇₈₉")
_str='C3H8O3'
_str=_str.translate(sub)
print(_str)
вывод
'C₃H₈O₃'
В вашем коде sub=u'\u208'
должно быть sub=u'\u2082'
. Простой замены было бы достаточно.
_str='H2O'
sub=u'\u2082'
for char in _str:
if char.isdigit():
_str=_str.replace(char,sub)
print(_str)
'H₂O'
Построение нормальных значений в словаре значений индекса.
sub=u'\u2080'
norm_to_sub={}
for norm in '0123456789':
norm_to_sub[norm]=sub
sub=chr(ord(sub)+1)
print(norm_to_sub)
{'0': '₀', '1': '₁', '2': '₂', '3': '₃', '4': '₄', '5': '₅', '6': '₆', '7': '₇', '8': '₈', '9': '₉'}
Как и предполагалось с помощью wjandrea вы можете сделать это.
sub = 0x2080
norm_to_sub={}
for norm in range(10):
norm_to_sub[norm] = ord(sub + norm)
{'0': '₀', '1': '₁', '2': '₂', '3': '₃', '4': '₄', '5': '₅', '6': '₆', '7': '₇', '8': '₈', '9': '₉'}
Вы даже можете создать функцию.
def change_to_sub(number):
sub=0x2080
return ''.join(chr(sub+int(num)) for num in str(number))
print(change_to_sub(1232454353654))
'₁₂₃₂₄₅₄₃₅₃₆₅₄'