python - (Python)如何按第一列对行进行分组,而不是按顺序排序?

标签 python sorting csv

我有一个结构非常奇怪的 csv 文件。列字段由数字组成,行部分但不完全按第一个列字段分组。 例如,如果列数据是 {number1, number2, number3},则文件将如下所示:

321, 12, 4932
321, 32, 4643
321, 95, 3921
...
143, 98, 2432
143, 28, 3910
...
832, 43, 2910
832, 54, 2190
...
572, 91, 8492
572, 92, 9302
572, 15, 3902
...
321, 93, 7281
321, 48, 6218
...
832, 78, 0148
832, 91, 7281

问题是我需要文件按第一列完美分组,所以上面的例子应该是:

321、12、4932
321, 32, 4643
321, 95, 3921
321, 93, 7281
321, 48, 6218
...
143, 98, 2432
143, 28, 3910
...
832, 43, 2910
832, 54, 2190
832, 78, 0148
832、91、7281
...
572, 91, 8492
572, 92, 9302
572, 15, 3902
...

..同时,如上所示,第一列不应按顺序排序。我需要第一列的顺序相同(这听起来很奇怪,但由于它是部分分组的,因此在大范围内具有一定的顺序)。

解决这个问题最快的算法是什么?

最佳答案

将行排列成列表,这些列表存储在由第一列键入的字典中。如果您希望保留从原始电子表格中读取它们的顺序,请使用 OrderedDict。像这样(未经测试的代码)

from collections import OrderedDict
...
d = OrderedDict()

# open the csv file as reader

for row in reader:
    key = row[0]
    d.setdefault(key,[]).append(row)

并使用结果

for key,rowlist in d.items()
    for row in rowlist:
       # do whatever with row

关于python - (Python)如何按第一列对行进行分组,而不是按顺序排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871564/

相关文章:

mysql - 多个左连接和 OR 的 SQL 问题

python - 如何在Python包中设置路径

ruby - 从按哈希值排序的哈希中获取键数组

java - TreeMap<int[],Double> 初始化并按值排序

Mysql - 从表 B 引用时需要获取表 A 的最新信息

python - 在 Python 3 中编写 csv

python - 获取邮件的内容 IMAPCLIENT

python - 在 AMPPS 中设置 Python - 内部服务器错误

python - grpc-Python max_workers 限制同时进程数

mysql - 如何在 Rails 中的 CSV 导出文件中将记录数组添加到事件记录模型中的行