<p>这类事情通常比较好,不必求助于<code>lambda</code>,而是使用<code>operator.itemgetter</code>:</p>
<pre><code>from operator import itemgetter
data = """
General Motors,Chevrolet,K1500 TAHOE 4WD,18,2900,Standard SUV 4WD
General Motors,Chevrolet,TRAVERSE AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,16,3400,Standard SUV 4WD
Ford Motor Company,Ford,Expedition 4WD,17,3100,Standard SUV 4WD
Ford Motor Company,Ford,EXPLORER AWD,19,2750,Standard SUV 4WD
"""
data_lines = [x.split(",") for x in data.splitlines()[1:]]
print sorted(data_lines, key=itemgetter(3))
# Optionally join back to strings:
map(",".join, sorted(data_lines, key=itemgetter(3)))
</code></pre>
<p>(可选)要将文件用作iterable方法,请执行以下操作:</p>
<pre><code>from string import split
from functools import partial
from operator import itemgetter
getter = itemgetter(3)
splitter = partial(split, sep=",")
def sort_key(s):
return getter(splitter(s))
with open("data_file.txt") as data:
print sorted(data, key=sort_key))
</code></pre>
<p>这很好地分离了不同的部分(分割分隔符、用于排序的特定项索引以及对<code>sorted</code>的实际调用),否则这些部分在单个<code>lambda</code>中就耦合不良。你知道吗</p>