2025-12-01
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import re
|
||||
from typing import Tuple
|
||||
|
||||
from itertools import cycle
|
||||
|
||||
__all__ = ["natural_comparison_key"]
|
||||
|
||||
_re_digits = re.compile(r"(\d+)")
|
||||
|
||||
|
||||
def natural_comparison_key(key: str) -> Tuple:
|
||||
"""Comparison key function for sorting strings by natural sort order.
|
||||
|
||||
See: https://en.wikipedia.org/wiki/Natural_sort_order
|
||||
"""
|
||||
return tuple(
|
||||
(int(part), part) if is_digit else part
|
||||
for part, is_digit in zip(_re_digits.split(key), cycle((False, True)))
|
||||
)
|
||||
Reference in New Issue
Block a user