是Python';s排序功能与Linux';s使用LC_ALL=C进行排序

是Python';s排序功能与Linux';s使用LC_ALL=C进行排序,python,linux,sorting,Python,Linux,Sorting,我正在将Bash脚本移植到Python。该脚本设置LC_ALL=C,并使用Linux sort命令确保本机字节顺序,而不是特定于语言环境的排序顺序() 在Python中,我想使用Python的listsort()或sorted()函数(不带key=选项)。我是否总是会得到与Linux sort相同的结果,使用LC_ALL=C?考虑到您可以添加一个比较函数,您可以确保排序将与LC_ALL=C等效。不过,从文档中看,如果所有字符都是7bit,则默认情况下它会以这种方式排序,否则,is将使用特定于区域

我正在将Bash脚本移植到Python。该脚本设置
LC_ALL=C
,并使用Linux sort命令确保本机字节顺序,而不是特定于语言环境的排序顺序()


在Python中,我想使用Python的list
sort()
sorted()
函数(不带
key=
选项)。我是否总是会得到与Linux sort相同的结果,使用
LC_ALL=C

考虑到您可以添加一个比较函数,您可以确保排序将与LC_ALL=C等效。不过,从文档中看,如果所有字符都是7bit,则默认情况下它会以这种方式排序,否则,is将使用特定于区域设置的排序


在使用8位或Unicode字符的情况下,特定于区域设置的排序非常有意义。

Python版本中小于3的非Unicode字符串实际上是字节。排序函数和方法不执行任何强制区域设置的操作(需要区域设置模块函数来显式促进区域设置感知排序)


unicode字符串和Python3.x的所有字符串不再是字节。Python3中有一个“bytes”类型

如果将
cmp
参数传递给 以及:

我一直在使用绑定和sorted()对事物进行排序,并使用我自己的语言环境(在我的案例中是加泰罗尼亚语)。例如,按名称属性排序用户配置文件列表:

collator = PyICU.Collator.createInstance(PyICU.Locale('ca_ES.UTF-8'))
sorted(user_profiles, key=lambda x: x.name, cmp=collator.compare)

Python的哪个版本以及要排序的项目?谢谢大家。我的数据都是Unicode,我说“不带key=option”,因为我将其用于其他目的。这个解决方案非常有效@nabucosound,您的解决方案很有趣,但安装PyICU对我来说有点重。再次感谢。
collator = PyICU.Collator.createInstance(PyICU.Locale('ca_ES.UTF-8'))
sorted(user_profiles, key=lambda x: x.name, cmp=collator.compare)