【发布时间】:2020-06-17 19:00:48
【问题描述】:
在我的数据库中,我有西里尔文和拉丁文字符的记录。默认情况下,它们按字母顺序排列,拉丁记录在前:
abc...bcd...cde...абв...
我想把西里尔字母放在第一位:
абв...abc...bcd...cde...
到目前为止我所尝试的:
This solution。它不是那么好,因为它只按 第一个单词,我可以同时使用西里尔文和拉丁文单词 字符串(甚至是同一个单词中的混合字符)。
用西里尔字母和拉丁字母编写我自己的列表。它有效,但 一点都不好。我无法考虑所有可能的字母 在两个字母中,包括带有变音符号的字母并写下它们 下来。
我也一直在研究 PyICU,但不知道如何使用它。
我的猜测是我应该在这里使用一些自定义排序规则。问题是如何在实践中做到这一点。
【问题讨论】:
-
那么,您想要达到的确切顺序是什么? “我想把西里尔字母放在第一位”——任何包含西里尔字母的字符串都应该排在全拉丁字符串之前吗?
-
@ZaurNasibov 不是真的。我希望每个西里尔字符都出现在拉丁字符之前。例如,“waюnt”(带有一个西里尔字母)应该出现在“wannt”之前:这两个词的第三个字母不同,而西里尔字母位于拉丁语之前。但是如果我们有 'wqюнт' 和 'wannt',这里 'wannt' 应该排在第一位,因为我们比较第二个字母,并且在拉丁字母表中,'a' 在 'q' 之前。
-
您可以在
sorted或list.sort中使用key函数,如果第一个字符串字符是西里尔文,则为0,否则为1。 -
@PanagiotisKanavos 我需要考虑每个字符,而不仅仅是第一个。
-
@snakecharmerb PostgreSQL。但排序实际上是在从数据库中检索到字符串之后发生的。
标签: python sorting unicode collation