【问题标题】:sorted() list not working as expected. Python 2.7sorted() 列表未按预期工作。蟒蛇 2.7
【发布时间】:2017-06-17 01:24:03
【问题描述】:

尝试将此列表从最低值 (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']

非常感谢您的帮助。

谢谢

【问题讨论】:

  • 协助什么?你的问题是什么?你试过什么?你在做什么?你得到什么?你期待什么?
  • 嗨 kostek,我正在尝试从最低到最高值对列表进行排序。我认为这很清楚。我很抱歉。
  • 试试sorted_d = [int(n.split('||')[0]) for n in d]

标签: python-2.7 list sorting


【解决方案1】:

您还可以拆分|| 上的字符串并将第一部分指定为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']

【讨论】:

  • 嗨降档,我真的需要最低 (399||1) 到最高值 (11064||2)。
  • 嗨@S1NTAX,感谢您的解释,我已经解决了。
  • 非常感谢!!!对于最初没有明确说明我想要的结果,我深表歉意。作为知识库,我已经使用 stackoverflow 大约 3-4 年了,但这是我第一次不得不发布问题。我从这次经验中吸取了教训,下次会更准确。
  • 非常欢迎,你的问题很好,我只是误会了,很高兴能帮上忙
【解决方案2】:

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

1
10
100
1000
2
20
200
2000

【讨论】:

  • 谢谢尼克!这解释了发生了什么,但我仍然不知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 2014-05-16
  • 2013-07-26
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多