2013-11-24 71 views
0

我正在用python3創建一個撲克遊戲,並且用於分類的手,我這樣做是這樣的:以不同方式使用排序函數的方式?

C < D < H < S2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A

輸出看起來是這樣的:

Sorted Hand: ['D5', 'DA', 'DT', 'HA', 'SQ']

但我需要它看起來像:

Sorted Hand: ['D5', 'DT', 'DA', 'HA', 'SQ']

我正在使用排序的函數來做到這一點,有沒有什麼辦法來定製排序函數的工作方式,並使其不按字母順序但數字地使用字母?我不知所措我在這裏... =/

回答

2
k1, k2 = ['C','D','H','S'], ['2','3','4','5','6','7','8','9','T','J','Q','K','A'] 
data = ['D5','DA','DT','HA','SQ'] 
print sorted(data, key=lambda x: k1.index(x[0]) * 13 + k2.index(x[1])) 

輸出

['D5', 'DT', 'DA', 'HA', 'SQ'] 
+0

你可能會想說'* 13',如果我理解這個權利,那麼'CA'(排序值:12)不會出現在'D2'後面(排序值:10)。 – cHao

+0

@cHao好趕:) :)修復它。謝謝:) – thefourtheye

+0

使用lambda函數是我的原始猜測,但我一直忘記索引部分,否則我的第一個猜測是非常相似>。<謝謝,但!不能投票,但如果我能你肯定得到它 – TheMuffinMan834

1

什麼@thefourtheye已經發布只是一個變種

def customSort(card): 

    suit, value = card 
    value_lookup = {'T':10, 'J':11, 'Q':12, 'K':13, 'A':14} 

    return value_lookup.get(value, int(value)) 

print sorted(['D5', 'DA', 'DT', 'HA', 'SQ'], key=customSort) 
+1

字典的'.get'方法存在簡單地在您的返回語句中的邏輯:'返回value_lookup.get(價值,int(value))'。也許還會返回一個像'(suit,value_lookup.get(value,int(value))'這樣的元組,以使訴訟順序是一致的,但是從OP中不清楚是否需要。 – DSM

+0

這是一個更優雅的解決方案謝謝。 – John