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

时间:2016-03-28 12:47:57

标签: python string python-2.7 sorting

我试图以特定的方式对字符串的单词进行排序:在我的代码下面,输出是" 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)

我想确切地说我的问题与以下内容不同:How to sort the letters in a string alphabetically in Python:事实上,链接中给出的答案并没有考虑字符串中大写和小写的区别。

3 个答案:

答案 0 :(得分:9)

1 1 12 12 123 123 1234 1,234 12345 12,345 123456 123,456 1234567 1,234,567 12345678 12,345,678 123456789 123,456,789 1234567890 1,234,567,890 根据每个角色的序数进行排序。大写字母的序数低于所有小写字母。如果您想要不同的行为,则需要定义自己的密钥:

sorted()

这样,c = sorted(s, key=lambda c: (c.lower(), c.islower())) 将按c排序,('c', 1)C排序。两者都来自('c', 0)('d', ...)等,但首都('e', ...)早于(低于)小写C

顺便说一下,您不应该说c因为d = "".join(sorted(c))已经排序了。只需c

答案 1 :(得分:2)

如果我理解了您的要求,您需要对字符串进行排序

  1. 不改变字母大小写
  2. 好像所有字母都有相同的大小写
  3. 这可以实现,例如,

    In [44]: a = 'zWea'
    
    In [45]: sorted(a,key=lambda c:c.upper())
    Out[45]: ['a', 'e', 'W', 'z']
    
    In [46]: 
    

    这是有效的,因为您在比较过程中会瞬间转换个别个字符。

    忘记提及,你可以在你的字符串中混合使用非字母字符,但是在大写和小写字母字符之间放置一些字符(例如^插入符号),所以你得到的取决于使用.lower().upper()字符串方法,

    In [56]: sorted('abCD^',key=lambda c:c.lower())
    Out[56]: ['^', 'a', 'b', 'C', 'D']
    
    In [57]: sorted('abCD^',key=lambda c:c.upper())
    Out[57]: ['a', 'b', 'C', 'D', '^']
    
    In [58]: 
    

答案 2 :(得分:1)

您也可以尝试这样

$results= \DB::table('groups as b')
                ->join('group_types as bt', function($join) {
                    $join->on('bt.id', '=', 'b.type_id')
                         ->where('b.owner_id', '<>', 3);
                })
                ->join('group_users as bu', function($join) {
                    $join->on('b.id', '=', 'bu.group_id')
                         ->where('bu.status', '=', 'active');
                })
                ->select('b.name','bt.name')
                ->groupBy('b.name, bt.name')                    
                ->get();

输出:

import re

def natural_sort(wrd): 
    convert = lambda text: int(text) if text.isdigit() else text.lower() 
    final = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return ''.join(sorted(wrd, key = final))

OR

你可以在名为natsort

的PyPI上为第三方库做这件事

https://pypi.python.org/pypi/natsort