当前位置: 首页 > 面试题库 >

Python无法正确排序unicode。Strcoll没有帮助

颜思淼
2023-03-14
问题内容

我在OSX和Linux上的Python 2.5.1和2.6.5中使用Unicode排序规则对列表进行排序时遇到问题。

import locale   
locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8')
print [i for i in sorted([u'a', u'z', u'ą'], cmp=locale.strcoll)]

应该打印:

[u'a', u'ą', u'z']

而是打印出来:

[u'a', u'z', u'ą']

总结一下-好像strcoll坏了。尝试了各种类型的变量(例如非Unicode编码的字符串)。

我做错了什么?

最好的问候,Tomasz Kopczuk。


问题答案:

显然,在所有平台上进行排序的唯一方法是使用具有PyICU绑定的ICU库(在PyPI上为PyICU)。

在OS X:上sudo port install py26-pyicu,请注意此处描述的错误:https :
//svn.macports.org/ticket/23429(使用Macports的乐趣)。

不幸的是,严重缺乏PyICU的文档,但是我设法找出了它的完成方法:

import PyICU
collator = PyICU.Collator.createInstance(PyICU.Locale('pl_PL.UTF-8'))
print [i for i in sorted([u'a', u'z', u'ą'], cmp=collator.compare)]

这使:

[u'a', u'ą', u'z']

另一个优点-@bobince:它是线程安全的,因此在设置请求方式的语言环境时并非没有用。



 类似资料:
  • 问题内容: 在Chrome 14和Firefox 5(尚未测试其他浏览器)中,以下代码无法正确对数字进行排序: 返回10,100,20,30,60 我尝试了不同的数字,它总是像没有出现0一样,否则会正确地对数字进行排序。有人知道为什么吗? 问题答案: 我尝试了不同的数字,它总是像没有出现0一样,否则会正确地对数字进行排序。有人知道为什么吗? 您正在按字典顺序进行排序(例如,将对象转换为字符串,然后

  • 我想正确打印unicode(比如希腊字符),但我有问题。例如: 问题是是否有任何解决方案可以正确打印所有卡哈拉特。我认为对于希腊字符,UTF-16是可以的。

  • 我正在尝试自己编程气泡排序、选择排序和插入排序。但是,我在插入排序方面遇到了麻烦。我会提供我的代码以及每行在做什么 好的,所以int count是找出排序数组的起始位置。然后我声明了index以查找将元素放在排序数组之后的位置,并为未排序数组的第一个元素声明了一个临时int,如果它小于排序数组的最后一个元素。然后它反转数组直到第一个元素,如果它大于我要添加的元素,则为其索引分配索引。本质上是为了让

  • 问题内容: 例如,如何转换字符串。我从网站获得的字符串,未在中进行编码。它工作在计划只是罚款使用Swing( ),但是当我过去的链接罐子Windows控制台(要运行的应用程序),它不显示在字符串中正确的字符的字符和。 我从网站上得到那串 。如何在Swing应用程序中进行编码或显示,因此当我运行应用程序时,它将向我显示此字符(以及课程的其他unicode字符(“Ž”,“ž”,“č”和“Š”) )?

  • 我有一个sql查询 所以我显然想按价格从高到低来订购。然而,它似乎是取第一个数字并按其排序。我的理论是,它将它视为字符串,由于列是varchar,这是有意义的。然而,这是第三方数据,所以我被它卡住了。我怎样才能订购,使较大的数字在前? 这是一个如何排序的例子

  • 问题内容: 由于某种原因,当我添加到优先级队列时,它不能完全按字母顺序对字符串进行排序,也无法理解原因。 这是添加到PriorityBlockingQueue的代码: 但是我没有得到完全排序的输出(只有前几行,但是您可以看到它没有排序): 这是预期输出文件中排序输出的实数(第一部分): 问题答案: 我怀疑您正在尝试迭代并打印元素。 请注意,优先级队列数据结构(AKA heap)不能保证排序- 它保