sorted()列表不按预期工作。 Python 2.7

时间:2017-06-17 01:24:04

标签: python-2.7 list sorting

尝试将此列表从最低(399 || 1)排序到最高值(11064 || 2),同时保留在API循环请求中重用的提供数据格式。

如下所示,sorted()不能正常工作(I)。这是Python 2.7。 它看起来像碎片一样。为什么1000-1100会在300-700之前,然后是8000?我无法在任何地方找到同样的问题。

sorted_d = sorted(d)
print sorted_d

执行命令

[u'1053||1', u'1092||2', u'1093||1', u'1094||1', u'1094||2', u'1095||1', 
u'1095||2', u'1096||7', u'1096||8', u'1097||7', u'1097||8', u'11064||1', 
u'11064||2', u'399||1', u'412||1', u'412||2', u'413||1', u'414||1', 
u'434||2', u'616||1', u'617||1', u'618||1', u'619||1', u'620||1', u'621||1', 
u'622||1', u'727||1', u'8096||1', u'8097||1', u'8099||1', u'8101||1', 
u'8105||1', u'8112||1', u'8113||1', u'8140||1', u'8141||1', u'8142||1', 
u'8143||1', u'8144||1', u'8146||2', u'8150||1', u'8152||1', u'8153||1', 
u'8154||1', u'8157||1', u'8158||1', u'8159||1', u'8160||1', u'8161||1', 
u'8162||1', u'8163||1', u'8164||1', u'8165||1', u'8166||1', u'8167||1', 
u'8168||1', u'8169||1', u'8170||1', u'8171||1', u'8172||1', u'8173||1', 
u'8174||1', u'8175||1', u'8184||2', u'8184||3', u'8185||2', u'8185||3', 
u'8186||5', u'8186||6', u'8187||1', u'8188||2', u'8190||2', u'8191||1']

非常感谢。

THX

2 个答案:

答案 0 :(得分:0)

因为它将您的'1053 || 1'数据视为字符串并将其排序为字符串类型而不是数字值。所以它实际上是以这种方式排序,升序:

1
10个
100个
1000
2
20个
200个
2000

答案 1 :(得分:0)

您还可以在||上拆分字符串,并将第一部分指定为key parameter

sorted_d = sorted(d, key = lambda x: int(x.split('||')[0]))

print sorted_d

[u'399||1', u'412||1', u'412||2', u'413||1', u'414||1', u'434||2', u'616||1', u'617||1', u'618||1', u'619||1', u'620||1', u'621||1', u'622||1', u'727||1', u'1053||1', u'1092||2', u'1093||1', u'1094||1', u'1094||2', u'1095||1', u'1095||2', u'1096||7', u'1096||8', u'1097||7', u'1097||8', u'8096||1', u'8097||1', u'8099||1', u'8101||1', u'8105||1', u'8112||1', u'8113||1', u'8140||1', u'8141||1', u'8142||1', u'8143||1', u'8144||1', u'8146||2', u'8150||1', u'8152||1', u'8153||1', u'8154||1', u'8157||1', u'8158||1', u'8159||1', u'8160||1', u'8161||1', u'8162||1', u'8163||1', u'8164||1', u'8165||1', u'8166||1', u'8167||1', u'8168||1', u'8169||1', u'8170||1', u'8171||1', u'8172||1', u'8173||1', u'8174||1', u'8175||1', u'8184||2', u'8184||3', u'8185||2', u'8185||3', u'8186||5', u'8186||6', u'8187||1', u'8188||2', u'8190||2', u'8191||1', u'11064||1', u'11064||2']