考虑区域设置对元组列表进行排序(瑞典排序)

2023-11-23

显然 PostgreSQL 8.4 和 Ubuntu 10.04 无法处理更新的瑞典字母表 W 和 V 排序方式。也就是说,它仍然将它们排序为相同的字母,如下所示(瑞典语排序的旧定义):

  • Wa
  • Vb
  • Wc
  • Vd

它应该是(瑞典语排序的新定义):

  • Vb
  • Vd
  • Wa
  • Wc

我需要为我正在构建的 Python/Django 网站正确排序。我尝试了各种方法来使用 *values_list* 对从 Django QuerySet 创建的元组列表进行排序。但由于它是瑞典语,所以 å、ä 和 ö 字母也需要正确排序。现在我要么有一种方式,要么有另一种方式,而不是两者都有。

list_of_tuples = [(u'Wa', 1), (u'Vb',2), (u'Wc',3), (u'Vd',4), (u'Öa',5), (u'äa',6), (u'Åa',7)]

print '########## Ordering One ##############'
ordered_list_one = sorted(list_of_tuples, key=lambda t: tuple(t[0].lower()))
for item in ordered_list_one:
    print item[0]

print '########## Ordering Two ##############'
locale.setlocale(locale.LC_ALL, "sv_SE.utf8")
list_of_names = [u'Wa', u'Vb', u'Wc', u'Vd', u'Öa', u'äa', u'Åa']
ordered_list_two = sorted(list_of_names, cmp=locale.strcoll)
for item in ordered_list_two:
    print item

示例给出:

########## Ordering One ##############
Vb
Vd
Wa
Wc
äa
Åa
Öa
########## Ordering Two ##############
Wa
Vb
Wc
Vd
Åa
äa
Öa

现在,我想要的是这些的组合,以便 V/W 和 å,ä,ö 顺序都是正确的。更准确地说。我想订购一件尊重语言环境。然后使用每个元组中的第二项(对象 ID),我可以在 Django 中获取正确的对象。

我开始怀疑这可能吗?将 PostgreSQL 升级到可以更好地处理排序规则的新版本,然后在 Django 中使用原始 SQL 是否可能?


跑步时LC_ALL=sv_SE.UTF-8 sort在你的 Ubuntu-10.04 示例中,它在 Vb 之前出现了 Wa(“旧方式”),因此 Ubuntu 似乎不同意“新方式”。 由于 PostgreSQL 依赖于操作系统,因此它的行为与给定相同 lc_collat​​e 的操作系统相同。

实际上 debian glibc 中有一个与这个特定排序问题相关的补丁:http://sourceware.org/bugzilla/show_bug.cgi?id=9724但遭到反对,没有被接受。如果您只需要在您管理的系统上执行此行为,您仍然可以将补丁的更改应用到 /usr/share/i18n/locales/sv_SE 并通过运行来重建 se_SV 区域设置locale-gen sv_SE.UTF-8。或者更好的是,创建您自己的从中派生的替代语言环境,以避免弄乱原始语言环境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

考虑区域设置对元组列表进行排序(瑞典排序) 的相关文章

随机推荐