无法对列表进行排序
问题描述:
我有一个列表,其中包含元组列表,我想按第二个元素排序这些子列表,它是介于0.0和10.0之间的数字。无法对列表进行排序
for i in range(0, len(data)):
data[i] = sorted(data[i], key=itemgetter(1), reverse=True)
它全部整理如我所料,但一个元素是不是这就是:
<type 'list'>: [('String1', '7.5', '', '', None), ('String2', '7.5', '', '', None), ('String3', '10.0', '', '', None)]
这个清单是喜欢它的上面,即使它应该具有的元素,用10.0g前面。
为什么它不排序该行,但所有其他?是因为它有7.5次吗?
答
您需要为float
不是str
>>> sorted(data[i], key=lambda j: float(j[1]), reverse=True)
[('String3', '10.0', '', '', None), ('String1', '7.5', '', '', None), ('String2', '7.5', '', '', None)]
否则书面你是比较字符串值进行排序
'7.5' > '10.0'
个
答
你想把它当作float
data[i] = sorted(data[i], key=lambda x: float(x[1]), reverse=True)
答
你的数据是字符,
>>> "10" < "7"
True
>>>
转换为浮动,无论是在您的排序比较函数或在您的数据,如果这就是它的正确的地方。
请注意,'7.5'> '10.0'的输出与'7.5> 10.0'的输出不同...... – jonrsharpe
你的原始数据是什么样的?你想得到什么? –