2009-01-13 61 views
10

部分建立此列表的一個子鍵的列表,蟒蛇,排序由這是每一個元件中的程序的

[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'] 

我目前正試圖通過進化的名稱,而不是按字母順序排序它號碼。有沒有什麼辦法可以做到這一點,而不僅僅是改變列表中出現的兩個東西的順序(如'智力x 1)?

+1

附註:如果將其轉換爲元組列表而不是unicode字符串,您可能會發現它通常更方便;特別是名爲元組可能確實有助於代碼的可讀性。 – 2009-01-13 20:18:41

回答

23

你必須得到字符串中的 「關鍵」。

def myKeyFunc(aString): 
    stuff, x, label = aString.partition(' x ') 
    return label 

aList.sort(key= myKeyFunc) 
-10

正如你試圖排序什麼是本質上的自定義數據,我會去自定義排序。

Merge sort
Bubble sort
Quicksort

+1

不,您想使用自定義比較器的內置排序方法。 – 2009-01-13 20:04:45

+0

S.Lott做了什麼?如果沒有,你能分享一個代碼示例嗎? – Teifion 2009-01-13 20:09:23

+0

這是S.洛特所做的。 – recursive 2009-01-13 20:19:31

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方法,但你可能會明白。

乾杯, 帕特里克

10

如何:

lst.sort(key=lamdba s: s.split(' x ')[1]) 
1

要做到這一點,你需要實現一個自定義的比較:

def myCompare(x, y): 
    x_name = " ".join(x.split()[2:]) 
    y_name = " ".join(y.split()[2:]) 
    return cmp(x_name, y_name) 

然後你使用它比較定義爲輸入分類功能:

myList.sort(myCompare)