Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sort()在Python for Dict中无法正常工作_Python_Sorting_Csv_Dictionary - Fatal编程技术网

Sort()在Python for Dict中无法正常工作

Sort()在Python for Dict中无法正常工作,python,sorting,csv,dictionary,Python,Sorting,Csv,Dictionary,我有一个包含许多列的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], (

我有一个包含许多列的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个值,而且它们不符合顺序。有什么想法吗?

输出
列表进行了排序,但字典没有顺序,这就是为什么在结果字典中看不到顺序

输出
列表进行了排序,但字典没有顺序,这就是为什么在对字符串进行排序时,在结果字典中看不到顺序(按字典顺序排列)但希望它们按数字顺序排序。这不会发生。您可能希望将排序
函数更改为类似于:
lambda x:float(x[32])
的函数,以便根据按数字排序的浮点进行排序


还要注意,字典不会保留任何顺序(您可以使用
collections.OrderedDict
,但我假设您已经知道了这一点)。

您正在对字符串进行排序(按字典顺序排列)但希望它们按数字顺序排序。这不会发生。您可能希望将排序
函数更改为类似于:
lambda x:float(x[32])
的函数,以便根据数字排序的浮点进行排序


还要注意的是,字典不会保留任何顺序(您可以使用一个
collections.orderedict
,但我假设您已经知道了)

print dict((row[10], (row[11], row[8], row[32])) for row in output[:10])
您已将已排序的输出(
output.sort(…)
)转换为一个无序字典,字典基本上是作为Python中的哈希表实现的。有关详细说明,请参阅运行

print dict((row[10], (row[11], row[8], row[32])) for row in output[:10])

您已将已排序的输出(
output.sort(…)
)转换为一个无序字典,字典基本上是作为Python中的哈希表实现的。有关详细说明-

您需要知道的第一件事:
Python的dict是无序的,因此无法排序

如果您需要维护订单的dict,请查看

第二件事:

dict的键是唯一的。
如果您试图添加已存在于dict中的密钥,则该值将被覆盖。

这很可能是你没有得到你想要的所有元素的原因。

你需要知道的第一件事:
Python的dict是无序的,因此无法排序

如果您需要维护订单的dict,请查看

第二件事:

dict的键是唯一的。
如果您试图添加已存在于dict中的密钥,则该值将被覆盖。

这可能是你没有得到你想要的所有元素的原因。

什么是
len(输出)
?你想要的最终输出是什么?你可以只做
output=list(reader)
,或者更好的是,
output=sorted(reader,key=…,reverse=True)
@mgilson是的,这是可行的,但是,我可以在只输出那些特定列的情况下这样做吗?(10、11、8、32)什么是
len(output)
?你希望得到什么最终输出?你可以只做
output=list(reader)
,或者更好的是,
output=sorted(reader,key=…,reverse=True)
@mgilson是的,这是可行的,但是,我可以在仍然只输出那些特定列的情况下这样做吗?(10、11、8、32)当我尝试转换为float时,它返回一个ValueError“无法将字符串转换为float”@gr8skillz——那么字符串中有无法转换为浮点值的内容——可能是数据文件已损坏?请尝试找出无法转换的字符串值,这可能有助于解释为什么会出现此错误,因为您刚刚意识到这是我的列的标题。哎呀。@GR8SKILZ——您会遇到一个错误在生成“染色体”的行上:(“位置”、“距离”、“GC”)--'GC'无法转换为浮点。当我尝试转换为浮点时,它返回一个值错误“无法将字符串转换为浮点”@gr8skillz——那么字符串中有无法转换为浮点值的内容——可能是数据文件已损坏?请尝试找出无法转换的字符串值,这可能有助于解释为什么会出现此错误,因为您刚刚意识到这是我的列的标题。哎呀。@GR8SKILZ——您会遇到一个错误在生成“染色体”的行上:(“位置”、“距离”、“GC”)--'GC'不能转换为浮点。