我需要在格式化之前对字典文件进行排序。我使用了list.sort并把它放了 以ascii顺序(小写前的大写字母)。所以我在网上找到了这个代码来进行排序。它有效,但我不完全理解lambda如何使用2个变量和cmp()。我很困惑cmp正在比较以及lambda正在使用哪两个变量。请解释lambda如何在sort函数中使用cmp。
f = open("swedish.txt", 'r')
f2 = open("swed.txt", 'w')
doc = f.read().split('\n')
doc.sort(lambda x, y: cmp(x.lower(), y.lower()))
for line in doc:
f2.write(line + '\n')
f.close()
f2.close()
答案 0 :(得分:5)
要对列表[b,a,c]进行排序,必须将a与b和a与c进行比较,依此类推。没有别的东西可以做这个lambda,它将列表中的两个组件相互比较。 对于您的情况,关键参数更合适:
doc.sort(key=str.lower)
答案 1 :(得分:1)
@Danial对小写比较有更好的答案。但是因为你在python 2.x中询问了lambda,你可以传入一个比较函数,该函数接受2个变量并返回-1,0,1,这取决于var 1是否小于,等于或大于var 2。此功能已在python 3中删除,因此请考虑弃用。
lambda只是一个没有被分配给变量的函数,它通常用于这样的情况,其中一个调用需要一个函数,但你不想用小函数乱丢你的代码定义。 lambda x,y:
表示您正在使用变量x和y定义函数,cmp(x.lower(), y.lower())
是实现。在这种情况下,你小写字符串,cmp返回-1,0或1,如sort需要。
由于您只想减少案例,因此cmp解决方案比关键解决方案慢得多。使用key =,您只需将键小写一次,使用cmp函数,您可以为每个比较小写两个键。