在Python中重新排序日志文件中的数据

假设我们有一系列日志。在该数组中,每个条目都是一个由空格分隔的单词字符串。每个日志中的第一个单词是字母数字标识符。然后,有以下不同类型的字符串-

  1. ID后的每个单词仅包含小写字母;

  2. ID后的每个单词仅包含数字。

我们将这两种类型的日志分别称为字母日志和数字日志。ti保证每个日志在其id后至少有一个单词。

我们必须重新排序日志,以便所有字母日志都保留在任何数字日志之前。字母日志在字典上按顺序排序,忽略标识符,在平局的情况下使用标识符。最后,数字日志应按其原始顺序放置。因此,我们必须返回日志的最终顺序。

因此,如果输入像日志= [“ dig1 9 2 5 2”,“ let1 art can”,“ dig2 4 8”,“ let2 own kit dig”,“ let3 art zero”],那么输出将为[ “ let1 art can”,“ let3 art zero”,“ let2 own kit dig”,“ dig1 9 2 5 2”,“ dig2 4 8”]

为了解决这个问题,我们将遵循以下步骤-

  • 单词:=一个新列表

  • nums:=一个新列表

  • 对于每个登录日志,执行

    • 通过用空格分隔来连接s的每个元素,并在最后插入word数组

    • 在num的末尾插入日志

    • s:=日志单词列表

    • 如果第二个单词是数字,则

    • 除此以外,

    • words =然后按字典顺序对单词数组进行排序

    • words:=通过用空格分隔来连接word数组的每个元素,并创建一个字符串列表

    • 合并两个列表中的单词和数字,然后返回

    让我们看下面的实现以更好地理解-

    示例

    class Solution:
       def reorderLogFiles(self, logs):
          words = []
          nums = []
          for log in logs:
             s = log.split()
             if s[1].isdigit():
                nums.append(log)
             else:
                words.append((s[0], ' '.join(s[1:])))
                words = sorted(words, key=lambda x: (x[1],x[0]))
                words = [' '.join(w) for w in words]
          return words + nums
    ob = Solution()print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4
    8","let2 own kit dig","let3 art zero"]))

    输入值

    ["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]

    输出结果

    ['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']