我正在尝试按内部列表第一个元素对此嵌套列表进行排序:
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”的建议就像一个魅力!非常感谢你们!
答案 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?