【问题标题】:Sort list of strings by digits appearing in each element [duplicate]按每个元素中出现的数字对字符串列表进行排序[重复]
【发布时间】:2017-09-11 22:33:56
【问题描述】:

我有一个脚本,其目的是对不断下载到服务器上的空间数据集文件进行排序和处理。我的列表目前大致如下:

list = ['file.t00Z.wrff02.grib2', 'file.t00Z.wrff03.grib2', 'file.t00Z.wrff00.grib2', 'file.t00Z.wrff05.grib2', 'file.t00Z.wrff04.grib2', 'file.t00Z.wrff01.grib2', 'file.t06Z.wrff01.grib2', 'file.t06Z.wrff00.grib2', 'file.t06Z.wrff02.grib2', ...]

如您所见,每个文件都有特定的命名约定。

后面的脚本会依次处理这个列表中的文件,但是我需要按照每个文件名中“wrff”后面的两位数字指定的时间顺序(00、01、02... )。

我目前有一个正则表达式,它可以根据需要从列表中删除与“file.t”后面的两位数字不匹配的所有文件。但是有没有一种简单的方法可以通过子字符串对列表元素进行排序?

注意:我会选择简单地按修改时间对这些文件进行排序,但它们在数据目录中经常出现乱序。

【问题讨论】:

  • 这不是上述问题的重复,因为所需的顺序并不总是自然的字典顺序。
  • @cᴏʟᴅsᴘᴇᴇᴅ 这不是重复的,因为Sorting dictionary with alphanumeric keys in natural order [duplicate] 涉及字典中的项目,Does Python have a built in function for string natural sort? 不回答 OP 的问题,因为它不涉及字典顺序。最后,这两个“重复”的答案都超出了本文的范围。
  • @dugup 假设此类问题以前没有被问过是不合理的。与其投票重新打开,请找到适当的副本(如果原始副本标记不正确)。
  • @Ajax1234 我认为新的副本应该足以解决 OP 的问题。他们需要做的就是修改 lambda。
  • @Ajax1234 我看不出副本中的答案与此处的答案有何不同。仅仅因为问题不同,并不意味着它们不必具有相同/相似的解决方案,并且可以这样标记。

标签: python sorting


【解决方案1】:

您可以使用 sortedsort 并提供一个 lambda 函数来提取您想要作为键的数字。

sorted_list = sorted(list, key=lambda f: f[f.find('wrff'): f.find('wrff') + 6])

【讨论】:

  • 太棒了。我稍后会试一试!
  • 当我使用它时效果很好:list.sort(key=lambda x: x[x.find('wrff'): x.find('.grib2')])
  • 你知道我会如何使用这种格式来匹配出现在字符串末尾的字符吗?
  • 如果您想使用更复杂的逻辑,您可以创建一个常规函数而不是 lambda 函数并将其作为键传递。创建一个使用正则表达式来提取您感兴趣的字符串部分的函数可能是您最好的选择
  • 我昨晚玩了它,我发现通过这样做:list.sort(key=lambda x: x[x.find('wrff'):]) 将按括号中字符串后面的字符排序。谢谢你的帮助!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2017-06-20
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
相关资源
最近更新 更多