python,通过一个键来排序列表,该键是每个元素的子串

时间:2009-01-13 19:58:29

标签: python list sorting

程序的一部分构建此列表,

[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')?

5 个答案:

答案 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)

当您尝试对基本上自定义的数据进行排序时,我会使用自定义排序。

Merge sort
Bubble sort
Quicksort