0

我正在使用以下代码表单排序:

letters = '세븐일레븐'
old = [('세븐', 8), ('븐', 2), ('일', 5), ('레', 4)]
new = sorted(old, key=lambda x: letters.index(x[0]))

对于非拉丁字符,输出与输入相同:

[('세븐', 8), ('븐', 2), ('일', 5), ('레', 4)]

我期待的是:

[('세븐', 8), ('일', 5), ('레', 4), ('븐', 2)]
4

2 回答 2

1

为什么'일'要先排序'븐''븐'letters;中的第二个字符 index将返回它找到的第一个实例。

如果目标是区别对待特定序列,您需要定义letterslist您关心的完整字符串之一,而不是单个 flat str,例如:

letters = ['세븐', '일', '레', '븐']

然后index调用将被视为'세븐'与 分开'븐',并且您将获得预期的输出顺序。

于 2016-03-14T23:54:32.560 回答
1

排序没有问题。请注意,字母“븐”在您的字母字符串中出现了两次。由于 index 返回该字母的第一个索引,因此 letters.index('븐') 的计算结果为 1,这使其具有高优先级。

于 2016-03-14T23:51:17.247 回答