Python 将数字字符串转换为上标

Python 将数字字符串转换为上标,python,unicode,Python,Unicode,我需要将数字字符串转换为上标,有更好的(内置)方法吗 def to_sup(s): sups={u'1': u'\xb9', u'0': u'\u2070', u'3': u'\xb3', u'2': u'\xb2', u'5': u'\u2075', u'4': u'\u2074', u'7': u'\u2077', u'6': u'\u207

我需要将数字字符串转换为上标,有更好的(内置)方法吗

def to_sup(s):
    sups={u'1': u'\xb9', 
          u'0': u'\u2070',
          u'3': u'\xb3', 
          u'2': u'\xb2',
          u'5': u'\u2075',
          u'4': u'\u2074',
          u'7': u'\u2077',
          u'6': u'\u2076',
          u'9': u'\u2079',
          u'8': u'\u2078'}
    if s.isdigit():
        return ''.join([sups[i] for i in s])
print to_sup('0123')
输出:

⁰¹²³

你的方式有点不正确。最好是:

def to_sup(s):
    sups = {u'0': u'\u2070',
            u'1': u'\xb9',
            u'2': u'\xb2',
            u'3': u'\xb3',
            u'4': u'\u2074',
            u'5': u'\u2075',
            u'6': u'\u2076',
            u'7': u'\u2077',
            u'8': u'\u2078',
            u'9': u'\u2079'}

    return ''.join(sups.get(char, char) for char in s)  # lose the list comprehension
s.isdigit()
将只检查第一个字母,这可能没有意义

如果出于某种原因,您需要一行:

u''.join(dict(zip(u"0123456789", u"⁰¹²³⁴⁵⁶⁷⁸⁹")).get(c, c) for c in s)

完全脱离主题:我不会直接使用Unicode来处理这些格式细节,而是会生成一些中间标记代码,这些代码可以由一些外部引擎正确排版,而这些引擎又可以根据用例的细节选择使用OpenType样式功能(上标?分子?旧样式还是衬里?)。@KerrekSB,使用OpenType“sups”功能需要高级渲染软件,并且需要使用字体中的OpenType信息,当它工作时,最终使用与Unicode上标字符相同的字形。尽管某些字体可能只定义为普通数字的OpenType变体的上标字形。请看最后一行:您应该用
i
替换两个
s
。@root:1-不仅仅是
u“0123456789”
。2-