如何在Python中对列表进行排序并排除某些元素

3

我想要按字母顺序对一个字典进行排序,但是由于土耳其语中有其他字母,因此我不能使用sorted()函数。

例如我们有字母“ç”,它出现在字母“c”之后。如何使字母“ç”出现在字母“c”之后?

顺便说一下,这将不仅仅是一个字母,我们还有很多其他字母,并且字典将包含数百个单词和值。


你可以提供一个关键函数,将字母映射到字母表中的序数位置。 - jonrsharpe
那你有字母表吗?也就是你需要的所有字母的列表? - Riccardo Bucco
3个回答

4

以下是基于土耳其字母表的简单解决方案:

alphabet = "abcçdefgğhıijklmnoöprsştuüvyz"
words = ["merhaba", "aşk", "köpek", "Teşekkürle"]

sorted_words = sorted(words, key=lambda word: tuple(alphabet.index(c) for c in word.lower()))

这段代码可以按字典顺序对单词进行排序。它还可以处理包含大写字母的单词。


1
你可以使用sortedkey参数,但主要挑战是如何定义哪个字母更“大”。也许你可以使用一些字母值的表来进行排序。就像这样:
LETTER_VALUES = {
    ...
    "c": 100,
    "ç": 110
    ...
    }

sorted_ar = sorted(char_array, key=lambda ch: LETTER_VALUES.get(ch1, ord(ch)))

当然,数字只是一个随机的示例,ord 是“失败默认值”的最简单的示例。

0
你可以通过注入自己的字母顺序来实现这一点,例如:
letters = "abcçdefgğhıijklmnoöprsştuüvyz"
letters_dict = {i:letters.index(i) for i in letters}
print(sorted("açobzöğge", key=letters_dict.get))

以上代码应该输出: ['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z']


1
这不适用于大写字母。此外,它只能排序字母,而不能排序单词! - Riccardo Bucco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接