【问题标题】:Sorting Non-English Characters Alphabetically(ç, ş, ö) (Python-3x)按字母顺序排序非英文字符(ç、ş、ö)(Python-3x)
【发布时间】:2020-04-20 04:41:18
【问题描述】:

有一个这样的数组---> [[text1, number1], [text2, number2]...]

我想排序到这个数组(按第一个元素(文本))。此文本包含不同的字符,例如 ı、ç、ö... 我找到了定位方法,但我无法使用它。另外我想描述一下自己的功能。

【问题讨论】:

  • 您如何准确定义“按字母顺序”?例如,如果给你ö ộ ȭ ò,它们应该按什么顺序输入?
  • 由于字母没有按您想要的“字母”顺序定义,您需要定义自己的排序函数,包括所需的顺序。
  • A B C Ç D E F G Ğ H I İ J K L M N O Ö P R S Ş T U Ü V Y Z
  • 有示例代码吗?我正在为此工作 2 天。我有作业,但我没有时间????。

标签: python arrays python-3.x sorting arraylist


【解决方案1】:

尝试使用 sort 方法并将键指定为列表中每个元素的第一个条目

import unicodedata 
def strip_accents(text):
    print("HIIIIIIII: %s"%text)
    return ''.join(char for char in
                   unicodedata.normalize('NFKD', text)
                   if unicodedata.category(char) != 'Mn')

l=[['ç', 2], ['ç', 10], ['a', 3], ['b', 1], ['d', 7]]
print(sorted(l, key=lambda k: strip_accents(k[0])))
print(l)
# [['a', 3], ['b', 1], ['ç', 2], ['ç', 10], ['d', 7]]

参考:

Syntax behind sorted(key=lambda: ...)

https://stackoverflow.com/a/4512721/8692977

【讨论】:

  • 问题是“我的字母是 a, b, c, ç, d...但是如果我使用排序方法,ç 将是最后一个字符(ascii)”
  • 刚刚对代码进行了一些修改以说明@cedricdef
【解决方案2】:

通常,ç 等字符按字母顺序排列在其非重音字符 (c) 之后。从这个意义上说,您使用的编码可能对按字母顺序排序有所帮助,也可能无济于事。

我建议首先定义您的订单关系:

[a, á, à, b, c, ç, ...]

基于该关系实现< 比较函数,并使用众多可用排序方法之一对列表进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多