我知道这已被问过,但我一直无法找到解决方案。Python:自定义排序列表
我试图根据自定义字母表将列表的列表按字母顺序排列。
该字母表是Burmese script的一种表示形式,由Sgaw Karen以纯ASCII使用。缅甸语字母是一个字母音节 - 几十个发音,一些中音符号和几十个押韵,可以以几千种不同的方式组合,每一种都是代表一个音节的单个“字符”。 map.txt
文件包含以(Karen/Burmese)字母顺序列出的这些音节,但以某种未知方式转换为ASCII符号,因此第一个字符是u>m;.Rf
而不是က
或[ka̰]
。例如:
u>m;.Rf ug>m;.Rf uH>m;.Rf uX>m;.Rf uk>m;.Rf ul>m;.Rf uh>m;.Rf uJ>m;.Rf ud>m;.Rf uD>m;.Rf u->m;.Rf uj>m;.Rf us>m;.Rf uV>m;.Rf uG>m;.Rf uU>m;.Rf uS>m;.Rf u+>m;.Rf uO>m;.Rf uF>m;.Rf
c>m;.Rf cg>m;.Rf cH>m;.Rf cX>m;.Rf ck>m;.Rf cl>m;.Rf ch>m;.Rf cJ>m;.Rf cd>m;.Rf cD>m;.Rf c->m;.Rf cj>m;.Rf cs>m;.Rf cV>m;.Rf cG>m;.Rf cU>m;.Rf cS>m;.Rf c+>m;.Rf cO>m;.Rf cF>m;.Rf
在列表的列表中的每个列表具有作为其第一元件,斯高卡伦的字转换成ASCII码的符号以相同的方式。例如:
[['u&X>', 'n', 'yard'], ['vk.', 'n', 'yarn'], ['w>ouDxD.', 'n', 'yawn'], ['w>wuDxD.', 'n', 'yawn']]
这是我到目前为止有:
def alphabetize(word_list):
alphabet = ''.join([line.rstrip() for line in open('map.txt', 'rb')])
word_list = sorted(word_list, key=lambda word: [alphabet.index(c) for c in word[0]])
return word_list
我想每个列表的第一个元素按字母顺序排列word_list
(如 'U & X>' ,'vk。'),根据alphabet
中的模式。
我的代码还没有工作,我正在努力理解lambda和for循环的排序命令。
是什么模式呢? (在'map.txt'中)?这个文件是什么样的? – 2014-12-10 22:43:07
它以何种方式未能正常工作? “字母表”中有哪些内容,以及哪些值排序错误? – abarnert 2014-12-10 22:43:51
此外,使用参数名'word'当参数将是词的_list_似乎是一个非常令人困惑的事情,而可能是你在努力理解你的代码的部分原因。它也可能有助于将'lambda'变成一个超行的'def',所以你可以用不同的值手动调用它,并且看看它返回的结果(只是你没有把所有的东西都打包成一个巨大的表达式它在屏幕边缘运行;您可以将listcomp扩展为'for'循环,给出临时名称等,如果有帮助的话)。 – abarnert 2014-12-10 22:45:55