Python中sort()与sorted()处理CSV链接列排序异常原因求解
失效原因
你的排序方法失效的核心原因是第0列的链接存在重复值,Python列表的index()方法只会返回匹配元素第一次出现的索引位置:
- 当多个行的链接相同时,
tmp.index(k)对这些重复链接都会返回第一个相同链接所在的行号,导致这些行对应的排序key都是第一个重复行的第2列数值 - 排序时所有重复链接的排序key完全一致,自然无法按原始的第2列序号排序,仅会把相同链接聚集到一起,和你看到的现象完全吻合。
你之前处理其他表格时方法生效,是因为此前的链接列没有重复值,index()可以准确拿到每个链接对应的行号。
高效解决方法
你可以直接将链接和对应的排序序号绑定后排序,既规避了重复值问题,效率也远高于你之前的O(n²)写法,甚至比pandas的sort_values在中小数据量下更快:
import pandas as pd entities = pd.read_csv("24142265_0_4577466141408796359.csv", header=None) # 直接按第2列排序后提取第0列链接 entitiesUri = [uri for _, uri in sorted(zip(entities[2].astype(int), entities[0]))]
如果不需要保留pandas依赖,直接用Python标准库读csv速度还能更快:
import csv with open("24142265_0_4577466141408796359.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) # 每行结构是[链接, 标签, 序号],按序号转int后排序,提取链接 entitiesUri = [row[0] for row in sorted(reader, key=lambda x: int(x[2]))]
内容的提问来源于stack exchange,提问作者Angelos
相关产品推荐
相关产品推荐

