【问题标题】:Values sorted as String but I want to sort them as number in Python值排序为字符串,但我想在 Python 中将它们排序为数字
【发布时间】:2016-07-23 19:07:33
【问题描述】:

我在 python 中读取了一个日志,其中包含每一行的名称、内存、ncalls 并将其保存为元组列表,其中每个元素都是一个元组 (name, memory, ncalls) 有时需要根据名称对列表进行排序,有时需要根据内存或 ncalls 对列表进行排序。 如果我只是使用代码会出现问题

 mylist=sorted(mylist, key=itemgetter(2)) 

列表使用所需的参数进行排序,但 python 将参数视为字符串,我得到了这个结果

item3, 45, 1
item1, 4, 12
item4, 65, 3
item2, 65, 5

想要的结果是

item3, 45, 1
item4, 65, 3
item2, 65, 5
item1, 4, 12

因为 3 和 5 小于 12

如何在不改变保存列表的方式的情况下解决这个问题?

【问题讨论】:

  • 为什么字符串排序假设12大于3
  • 请重命名您的变量 - list 是一个内置函数,您将使用 list = sorted(...) 覆盖它
  • 您的输出表明 itemgetter(2)) 并不意味着您输入中的每个最后一个数字,因为 Selcuk 建议 3 不会在 12 之前出现
  • @AndreaF 我知道这一点,但在您的示例中,它看起来像 5 > 12 > 3 > 1,无论是整数排序还是字符串排序,它看起来都不正确。
  • 字符串排序会产生1, 12, 3, 5

标签: python sorting python-3.x


【解决方案1】:

解决方案是将 key 定义为将第三项转换为 int 的 lambda:

sorted_data = sorted(list, key=lambda t: int(t[2])) 

【讨论】:

  • 好答案,但请不要使用列表作为变量名。
猜你喜欢
  • 2012-01-20
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2010-11-13
  • 2015-09-28
  • 2016-02-14
相关资源
最近更新 更多