未知的字符排序

时间:2014-08-18 17:37:41

标签: python sorting unix character ascii

我正在排序大量值列表,并且我使用的是sort.exe文件(site herezip 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        ║
╚═══════╩══════════╝

1 个答案:

答案 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