不区分大小写的嵌套列表的字母排序

时间:2009-04-02 15:37:16

标签: python

我正在尝试按内部列表第一个元素对此嵌套列表进行排序:

ak = [ ['a',1],['E',2],['C',13],['A',11],['b',9] ]
ak.sort(cmp=lambda x, y: cmp(x[0], y[0]))
for i in ak: {
    print i
}

默认情况下,python认为A> a,因此得到的输出是:

['A', 11] ['C', 13] ['E', 2] ['a', 1] ['b', 9]

我尝试在比较期间通过添加x [0] .lower等将所有列表值转换为偶数情况,但没有用。我如何强制python(我正在使用2.4版本)进行不区分大小写的字母排序?

编辑:

  

Jarret和Brian,你的   关于括号的假设是   对!我忘了把它们放进去!而Jarret,你对不使用“cmp”的建议就像一个魅力!非常感谢你们!

2 个答案:

答案 0 :(得分:9)

尝试:

ak.sort(key=lambda x:x[0].lower())

我建议您避免使用cmp,因为它已在Python 2.6中弃用,并在3.0中删除。我知道你正在使用2.4,但cmp之所以不受欢迎,原因在于它是一种非常缓慢的排序方式。

我不确定为什么你的lower努力失败了,但是......也许你忘了使用函数调用而不仅仅是函数名? (即:cmp(x[0].lower(), y[0].lower())cmp(x[0].lower, y[0].lower)

答案 1 :(得分:3)

ak.sort(cmp=lambda x, y: cmp(x[0].lower(), y[0].lower()))

您是否忘记了x[0].lower()中的parens?