擅长:python、mysql、java
<p>您可以根据您的数据调整此示例(我没有掌握-:)</p>
<pre class="lang-py prettyprint-override"><code>from csv import DictReader, DictWriter
from sys import stdout
# simple, self-contained data
data = '''\
a,b,c
3,2,1
2,2,3
1,3,2
'''.splitlines()
# read the data
dr = DictReader(data)
rows = [row for row in dr]
# print the data
print('# unsorted')
dw = DictWriter(stdout, dr.fieldnames)
dw.writeheader()
dw.writerows(rows)
print('# sorted')
dw = DictWriter(stdout, dr.fieldnames)
dw.writeheader()
dw.writerows(sorted(rows, key=lambda d:d['a']))
# unsorted
a,b,c
3,2,1
2,2,3
1,3,2
# sorted
a,b,c
1,3,2
2,2,3
3,2,1
In [40]:
</code></pre>
<p>使用<code>DictReader</code>读取数据时,列表<code>rows</code>的每个元素都是一个字典,键入CSV数据文件第一行的字段名</p>
<p>如果要根据与键对应的值对列表进行排序,则必须为<code>sorted</code>提供一个<code>key</code>参数,该参数是一个返回要排序的值的函数</p>
<p>调用此函数时,需要对整个元素进行排序,在您的例子中是一个字典,我们希望对CSV的第一个字段进行排序,该字段由<code>'a'</code>索引,因此我们的函数使用lambda syntx在函数调用中内联定义,只是<code>lambda d: d['a']</code>返回我们要排序的值</p>
<p>注意,本例中的排序是按字母顺序排序的,因为我处理的是单个数字,一般来说,您可能需要将值(默认为字符串)转换为在上下文中有意义的其他值,例如<code>lambda d: int(d['a'])</code></p>