Python使用lambda作为键的sorted()

时间:2019-03-14 18:38:03

标签: python-3.x

我似乎无法理解key和lambda如何与sorted()一起工作。我正在尝试使用一个单词并从小写到大写进行排序,反之亦然,但无法使其正常工作。

s = 'Alphanumerical'
sorted(s)
['A', 'a', 'a', 'c', 'e', 'h', 'i', 'l', 'l', 'm', 'n', 'p', 'r', 'u']

sorted(s, key=lambda x: x.islower())
['A', 'l', 'p', 'h', 'a', 'n', 'u', 'm', 'e', 'r', 'i', 'c', 'a', 'l']

sorted(s, key=lambda x: x.isupper())
['l', 'p', 'h', 'a', 'n', 'u', 'm', 'e', 'r', 'i', 'c', 'a', 'l', 'A']

当我将使用方法从“低/高”更改为“低/高”时,它也没有给我预期的结果。

sorted(s, key=lambda x: x.lower())
['A', 'a', 'a', 'c', 'e', 'h', 'i', 'l', 'l', 'm', 'n', 'p', 'r', 'u']

sorted(s, key=lambda x: x.upper())
['A', 'a', 'a', 'c', 'e', 'h', 'i', 'l', 'l', 'm', 'n', 'p', 'r', 'u']

我可以升序排序a> Z(低到大写)的字母的唯一方法是:

sorted(sorted(s), key=lambda x: x.isupper())
['a', 'a', 'c', 'e', 'h', 'i', 'l', 'l', 'm', 'n', 'p', 'r', 'u', 'A']

另一个例子是,我想对一个数字列表进行升序排序,从奇数到偶数,但它也没有用!

d = [1,2,30,0,2,3,4,8,1,2]
sorted(d)
[0, 1, 1, 2, 2, 2, 3, 4, 8, 30]

sorted(d, key=lambda x: x%2 == 0)
[1, 3, 1, 2, 30, 0, 2, 4, 8, 2]

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

您可以使用ord

asc = sorted(s, key=lambda x: ord(x))

"A" "a" "a" "c" "e" "h" "i" "l" "l" "m" "n" "p" "r" "u"

desc = sorted(s, key=lambda x: -ord(x))

"u" "r" "p" "n" "m" "l" "l" "i" "h" "e" "c" "a" "a" "A"

ref:https://docs.python.org/3/library/functions.html#ord