python sorting()用lambda作为钥匙



我似乎不了解键和lambda如何与satered()一起使用。我正在尝试使用一个单词,如果从下层到上层,反之亦然,但不能使它起作用。

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']

当我将使用的方法从" iSlower/upper"更改为"下/上"时,也没有给我带来我预期的结果。

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]

我在这里缺少什么?

您可以使用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"

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

最新更新