python - 如何自然地对包含相似值的列表进行排序
问题描述
我有一个这样的字符串列表:
['id:9', 'vector:1', 'table:1', 'product:10', 'number:3', 'Number:4']
我想将它从较高的整数值排序到较低的值,然后是其余的:
['product:10', 'id:9', 'Number:4', 'number:3', 'vector:1', 'table:1']
值都是整数,不包括0,附加到它们的字符串可以是全部小写,全部大写,部分小写,部分大写,同时也类似于另一个项目:Number,NUMBER,number,NUMber
我尝试使用 natsort 但没有正确安排它们,我也尝试了这里讨论的其他一些解决方案在我的情况下仍然不起作用,那么如何在 python 中完成呢?
解决方案
如果您创建一个将每个字符串转换为元组的函数,则可以对这些元组进行排序:
l = ['id:9', 'vector:1', 'table:1', 'product:10', 'number:3', 'Number:4']
def negative_num_then_name(s):
name, num_str = s.split(':')
return -int(num_str), name
l.sort(key=negative_num_then_name)
l
['product:10', 'id:9', 'Number:4', 'number:3', 'table:1', 'vector:1']
如果您想了解幕后发生的事情,这将向您显示实际排序的内容(按升序排列):
l = ['id:9', 'vector:1', 'table:1', 'product:10', 'number:3', 'Number:4']
[negative_num_then_name(elem) for elem in l]
[(-9, 'id'),
(-1, 'vector'),
(-1, 'table'),
(-10, 'product'),
(-3, 'number'),
(-4, 'Number')]
sort
首先查找每个元组的第一个元素 - 整数 - 并且只有在平局的情况下,它才会查找第二个元素 - 字符串。
推荐阅读
- c# - 在同一列中分组不同的值
- php - 如何在 WordPress 主题中修复 index.php 上的“id=error-page”默认值
- mongodb - 如何判断 document.save 是否在猫鼬中进行?
- node.js - Selenium使用nodejs单击一组equals元素中的特定元素
- java - spring.config.additional-location 不适用于绝对/相对父目录
- android - 在数字 EditText 中附加特殊字符
- python - 更新 tkinter 中的标签
- python-3.x - 如何访问集合元素的元素?
- c# - 无法将自定义用户数据添加到脚手架 ASP.NET Core 项目
- c# - 使用 Windows 窗体时组合框的文本溢出选项