我正在尝试创建一种语言,并对其中的单词进行自动排序,我正在为它编写一个python脚本,因为我不能让事情变得简单。我需要用字母表:"æǽaàbdyýeéfgiíʒklmnŋΩΏoóøǿɤprʃsþðtʊuúʌvɯjz"
进行排序。
我在this post中尝试了最佳答案
def sortA(l, alphabet="AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"):
returnVal = sorted(l, key=lambda word: [alphabet.index(c) for c in word])
return returnVal
keys = sortA(keys, "æǽaàbdyýeéfgiíʒklmnŋΩΏoóøǿɤprʃsþðtʊuúʌvɯjz")
字符串
VSC表示,
Exception has occurred: ValueError
substring not found
File "filepath", line 13, in <lambda>
returnVal = sorted(l, key=lambda word: [alphabet.index(c) for c in word])
^^^^^^^^^^^^^^^^^
型
编辑
问题可能是某些字符的编码问题。
编辑2
我相信问题是从这里开始的:
def newEntry():
word = input("What is the word?: \n")
defin = input("What is the definition of the word?: \n")
etymology = input("Where does the word come from?:\n")
detail = [defin, etymology]
return {word: detail}
def entryToDict(e):
spl = str(e).split("\n")
return [spl[0], [spl[1],spl[2]]]
Read = (f.read()).split("\n\n")
dic = newEntry()
for i in Read:
entry = entryToDict(i)
dic[entry[0]] = entry[1]
keys = list(dic.keys())
f.close()
型
3条答案
按热度按时间liwlm1x91#
你得到这个错误,因为你有一个字符在
keys
中,而不是在alphabet
中。您可以更改
sortA
来处理此类情况,而不是抛出错误:字符串
当然,你可以打印
keys
,看看它的值是否不是它应该是的。编辑:
如果我使用你在注解中给出的列表,并更改
sortA
函数来打印所有不在你的alphabet
中的字符,就像这样:型
我得到:
型
这可以让您给予一个概念,即您在定制的
alphabet
中遗漏了哪些字符。xxb16uws2#
问题不在提供的代码中。这是阅读文本文件的问题。Actual Problem
t3psigkw3#
另一种方法是开发要使用的排序规则。如果您在使用gLibC的系统上,则可以使用排序规则创建自定义区域设置。或者,如果ICU4C在您的平台上可用,则可以使用PyICU:
以下规则是基于OP和评论的粗略草案:
字符串
然后在字母表中创建一个随机的字母列表:
型
创建一个排序器示例:
型
然后对列表进行排序:
型
编辑:
OP中的排序例程和本答案中的排序例程在字母表中的字符权重方面存在关键差异。OP的代码赋予字母表中的所有字母相同的权重,就排序而言,这意味着每个字母都有主要的强度。在我的答案中,带有变音符号的字母被赋予二级强度。这将导致与OP中定义的函数产生的排序顺序不同的排序顺序:
型
使用上面定义的collator:
型