我知道如何使用(简单)key =函数自定义排序。但是如果我需要一个更复杂的key = function,怎么做呢。把它放在一起我有问题。
这是片段: 在第一个例子中,我使用key = locale.strxfrm,这对于此目的来说足够好了。第二个例子我使用另一个key = function(itemgetter)。但我需要在一起。
import locale
import operator
locale.setlocale(locale.LC_ALL, "")
# on my computer: German_Germany.1252
lastnames = ["Bange", "Änger", "Amman", "Änger", "Zelch", "Ösbach"]
print(sorted(lastnames, key=locale.strxfrm)) # sorted correct
# alphabetically for Germany
print()
lastnames_firstnames_groups =[
["Bange", "Michael", 2],
["Änger", "Ämma", 2],
["Amman", "Anton", 1],
["Änger", "Chris", 2],
["Zelch", "Sven", 1],
["Ösbach", "Carl", 1]
]
print(sorted(lastnames_firstnames_groups, key=operator.itemgetter(2,0,1)))
# The result is sorted as I expected (the german umlaute are NOT sorted
# the correct way). Is there a way to "add" the string tranformation strxfrm
# as in the first example to this.
任何提示?
答案 0 :(得分:3)
听起来你可能想要
print(
sorted(
lastnames_firstnames_groups,
key=lambda t: (t[2], strxfrm(t[0]), strxfrm(t[1]))
)
)
答案 1 :(得分:0)
在已连接,已转换和有序的键上使用strxfrm:
f = operator.itemgetter(2,0,1)
print(sorted(lastnames_firstnames_groups, key=lambda x: locale.strxfrm(' '.join(str(y) for y in f(x)))))