程序的一部分构建此列表,
[u'1 x Affinity for war', u'1 x Intellect', u'2 x Charisma', u'2 x Perception', u'3 x Population growth', u'4 x Affinity for the land', u'5 x Morale']
我目前正在尝试按进化名称而不是数字按字母顺序对其进行排序。有没有什么方法可以做到这一点,而不只是改变列表中出现的两个东西的顺序(如'intellect x 1')?
答案 0 :(得分:23)
你必须从字符串中获取“密钥”。
def myKeyFunc( aString ):
stuff, x, label = aString.partition(' x ')
return label
aList.sort( key= myKeyFunc )
答案 1 :(得分:10)
怎么样:
lst.sort(key=lamdba s: s.split(' x ')[1])
答案 2 :(得分:2)
不知道您的商品是否标准化为1位,1位,1'x',1位,多个单词我写了这个:
mylist = [u'1 x Affinity for war', u'1 x Intellect', u'2 x Charisma', u'2 x Perception', u'3 x Population growth', u'4 x Affinity for the land', u'5 x Morale'] def sort(a, b): return cmp(" ".join(a.split()[2:]), " ".join(b.split()[2:])) mylist.sort(sort)
您可以在sort
方法中编辑解析,但您可能会明白这一点。
干杯, 帕特里克
答案 3 :(得分:1)
为此,您需要实施自定义比较:
def myCompare(x, y):
x_name = " ".join(x.split()[2:])
y_name = " ".join(y.split()[2:])
return cmp(x_name, y_name)
然后使用该比较定义作为sort函数的输入:
myList.sort(myCompare)
答案 4 :(得分:-10)
当您尝试对基本上自定义的数据进行排序时,我会使用自定义排序。