我正在排序大量值列表,并且我使用的是sort.exe文件(site here,zip file with sort.exe here)这是UNIX'排序& #39; Windows命令。但是,我无法弄清楚它的排序顺序。所以,我拿了ASCII字符列表,并在其上运行排序文件以查看它产生的顺序。 有谁知道这是什么字符排序,或者更具体地说我是如何在Python中实现它的?
修改: chcp最初是437(美国),我也试过65001(Unicode),两者都给我相同的输出。
╔═══════╦══════════╗
║ ASCII ║ SORT.EXE ║
╠═══════╬══════════╣
║ ! ║ ' ║
║ " ║ - ║
║ # ║ ! ║
║ $ ║ " ║
║ % ║ # ║
║ & ║ $ ║
║ ' ║ % ║
║ ( ║ & ║
║ ) ║ ( ║
║ * ║ ) ║
║ + ║ * ║
║ , ║ , ║
║ - ║ . ║
║ . ║ / ║
║ / ║ : ║
║ 0 ║ ; ║
║ 1 ║ ? ║
║ 2 ║ @ ║
║ 3 ║ [ ║
║ 4 ║ \ ║
║ 5 ║ ] ║
║ 6 ║ ^ ║
║ 7 ║ _ ║
║ 8 ║ ` ║
║ 9 ║ { ║
║ : ║ | ║
║ ; ║ } ║
║ < ║ ~ ║
║ = ║ + ║
║ > ║ < ║
║ ? ║ = ║
║ @ ║ > ║
║ A ║ 0 ║
║ B ║ 1 ║
║ C ║ 2 ║
║ D ║ 3 ║
║ E ║ 4 ║
║ F ║ 5 ║
║ G ║ 6 ║
║ H ║ 7 ║
║ I ║ 8 ║
║ J ║ 9 ║
║ K ║ a ║
║ L ║ A ║
║ M ║ b ║
║ N ║ B ║
║ O ║ c ║
║ P ║ C ║
║ Q ║ d ║
║ R ║ D ║
║ S ║ e ║
║ T ║ E ║
║ U ║ f ║
║ V ║ F ║
║ W ║ g ║
║ X ║ G ║
║ Y ║ h ║
║ Z ║ H ║
║ [ ║ i ║
║ \ ║ I ║
║ ] ║ j ║
║ ^ ║ J ║
║ _ ║ k ║
║ ` ║ K ║
║ a ║ l ║
║ b ║ L ║
║ c ║ m ║
║ d ║ M ║
║ e ║ n ║
║ f ║ N ║
║ g ║ o ║
║ h ║ O ║
║ i ║ p ║
║ j ║ P ║
║ k ║ q ║
║ l ║ Q ║
║ m ║ r ║
║ n ║ R ║
║ o ║ s ║
║ p ║ S ║
║ q ║ t ║
║ r ║ T ║
║ s ║ u ║
║ t ║ U ║
║ u ║ v ║
║ v ║ V ║
║ w ║ w ║
║ x ║ W ║
║ y ║ x ║
║ z ║ X ║
║ { ║ y ║
║ | ║ Y ║
║ } ║ z ║
║ ~ ║ Z ║
╚═══════╩══════════╝
答案 0 :(得分:2)
与我所拥有的GNU sort -df
上的-d
(字典顺序-f
,忽略情况sort
非常相似)。但是,位于顶部的'
和-
是不同的。这样的声音可能已在评论中得到解决,但供将来参考:
要在Python中按自定义顺序对字符串进行排序,一种方法是在排序键中使用maketrans()
和translate()
,如下所示:
ascii = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'
mapped = '\'-!"#$%&()*,./:;?@[\\]^_`{|}~+<=>0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'
trans = str.maketrans(mapped, ascii)
print("".join(sorted(ascii, key=lambda s: s.translate(trans)))) # prints mapped