用sorted()排序Python中的csv文件时返回程序员降序,而不是时间降序

2 投票
5 回答
2811 浏览
提问于 2025-04-16 18:42

我觉得我做的事情并不复杂。我正在对一个很大的csv数据文件进行预排序,因为里面的数据是随机时间顺序到达的。索引是正确的,但返回的格式不对。

    sortedList=sorted(reader,key=operator.itemgetter(1))

所以我得到的排序结果是 [-1 -10 -100 0 100 5000 60],而不是我期望的 [-100 -10 -1 0 10 100 5000 6000]。

我尝试了lambda函数的例子和itemgetter,但我不知道接下来该怎么做。

谢谢大家的帮助。

我问题的答案在评论里。原来数值是作为字符串排序的,而不是作为数字。我不知道可以在sorted()里指定键的类型。这个代码按我想要的方式工作:

    sortedList=sorted(reader,key=lambda x:float(x[1]))

5 个回答

0

我喜欢 compose

from operator import itemgetter

def compose(f, g):
    return lambda *a, **k: g(f(*a, **k))

sortedList = sorted(reader, key=compose(itemgetter(1), float))
1

看起来“reader”输出的是字符串,而你想要的是整数。你可以试试下面这样的代码:

    sorted(reader, key=lambda x: float(x[1]))
3

从你看到的输出结果来看,这些数据似乎是按照字符串的方式排序的,而不是数字的方式。

所以你可以这样做:

sortedList=sorted(reader, key=lambda t: int( t[1] ))

或者

sortedList=sorted(reader, key=lambda t: float( t[1] ))

更好的方法是,在创建reader的时候,确保它里面填充的是数字,而不是字符串。你可以使用QUOT_NONNUMERIC作为reader的一个参数来实现这个,具体可以参考这个链接:http://docs.python.org/library/csv.html#csv.QUOTE_NONNUMERIC

撰写回答