Python:如何按字母顺序对字符串中的字母进行排序,以区分大写字母和小写字母

Mar*_*nto 4 python sorting string python-2.7

我试图以特定的方式命令字符串的单词:在我的代码下面输出是"MNWdeorwy"但我希望它是"deMNorWwy"(所以我需要保持字母顺序,尽管是上o小写)你能帮我理解我错在哪里,为什么?谢谢

wrd = "MyNewWord"

def order_word(s):
    if s == "":
        return "Invalid String!"
    else:
        c = sorted(s)
        d = ''.join(sorted(c))
        return d

print order_word(wrd)
Run Code Online (Sandbox Code Playgroud)

我想确切地说我的问题与以下内容不同:如何在Python按字母顺序对字符串中的字母进行排序:实际上,链接中给出的答案不考虑字符串中大写字母和小写字母之间的区别.

zon*_*ndo 9

sorted()根据每个角色的序数进行排序.大写字母的序数低于所有小写字母.如果您想要不同的行为,则需要定义自己的密钥:

c = sorted(s, key=lambda c: (c.lower(), c.islower()))
Run Code Online (Sandbox Code Playgroud)

这样,c将按排序('c', 1)并按C排序('c', 0).前两款都('d', ...)('e', ...)等,但资本C是比小写较早(较低)c.

顺便说一句,你不应该说d = "".join(sorted(c))因为c已经排序了.做就是了d = "".join(c)

  • @ user53008元组按第一项,第二项,第三项等排序.因此'a'将低于'B',因为每个元组的第一项(每个字母的小写版本,即'a'和'b '比较为'a'更大.如果两个字母相同,则检查元组的第二项.例如,将'a'与'A'进行比较将比较('a',True)和(' a',False).由于元组的第一项是相同的,第二项是决胜局.True大于False,因此小写版本首先出现. (2认同)