我有一个包含许多列的CSV文件。我试图根据其中一列中的值(按降序数字顺序)对行进行排序。我只是输出前10个。然而,当我使用下面的代码时,我输出的输出不正确。
import csv
f = open('SNPs.csv', "rU")
reader = csv.reader(f)
output = [row for row in reader]
output.sort(key=lambda x: x[32], reverse=True)
print dict((row[10], (row[11], row[8], row[32])) for row in output[:10])
输出类似于:
'XRgroup8': ('38', '2', '0.47'), '2': ('30', '13', '0.37'), 'Chromosome': ('Position', 'Distance', 'GC'), 'XRgroup5': ('54', '1', '0.45')
很明显,它没有返回10个值,而且它们没有按顺序排列。有什么想法吗?
答案 0 :(得分:2)
您需要知道的第一件事:
Python的dicts是无序的,因此无法排序。
如果您需要维护订单的字典,请查看http://docs.python.org/2/library/collections.html#collections.OrderedDict
第二件事:
dict的键是唯一的 如果您尝试添加已存在于dict中的键,则该值将被覆盖 这是你没有得到你所希望的所有元素的最可能原因。
答案 1 :(得分:1)
output
列表已排序,但词典是无序的,这就是为什么在结果字典中看不到任何顺序
答案 2 :(得分:0)
您正在排序字符串(按字典顺序排序),但希望它们按数字顺序排序。这不会发生。您可能希望将排序key
函数更改为:lambda x: float(x[32])
,以便您根据以数字排序的浮点数进行排序。
另请注意,字典不会保留任何顺序(您可以使用collections.OrderedDict
代替 - 但我认为您已经知道了这一点。)
答案 3 :(得分:0)
你跑的那一刻
print dict((row[10], (row[11], row[8], row[32])) for row in output[:10])
您已将已排序的输出(output.sort(...)
)转换为无顺序字典,而字典实际上是在Python中实现为哈希表。有关详细说明 - http://mail.python.org/pipermail/python-list/2000-March/048085.html