2016-03-30 76 views
1

我知道在這個主題上還存在其他問題;然而,我一直沒有成功將這些答案適用於我的代碼。我需要幫助的是在我的第二和第三個打印函數中排序詞典,這些打印函數會按擊球順序排序詞典,這是詞典代碼中的中間值,例如。 ['DH',,299]。我的代碼如下:我很難按值排序字典

def main(): 
    print('Rays Starters','\n') 
    starters = {'DeJesus': ['DH', 6, 299], 
       'Loney': ['1B', 4, 222], 
       'Rivera': ['C', 9, 194], 
       'Forythe': ['2B', 5, 304], 
       'Souza Jr': ['RF', 2, 229], 
       'Longoria': ['3B', 3, 282], 
       'Cabrera': ['SS', 7, 214], 
       'Kiermaier': ['CF', 1, 240], 
       'Guyer': ['LF', 8, 275]} 
for key, value in starters.items(): 
    print(key, value) 
print('\n') 

print("Today's lineup", '\n') 
for key, value in (starters.items()): 
    print('Batting {}: {} {}, current avg: {}'.format(value[1], value[0], key, value[2])) 
print('\n') 

print('Lineup change', '\n') 
del starters['DeJesus'] 
del starters['Rivera'] 
starters2 = {'Wilson': ['C', 9, 152], 'Bechham': ['DH', 6, 200]} 
starters.update(starters2) 
for key, value in starters.items(): 
    print('Batting {}: {} {}, curent avg: {}'.format(value[1], value[0], key, value[2]))  

main() 

僅供參考,我的電流輸出爲:

Rays Starters 

Forythe ['2B', 5, 304] 
Loney ['1B', 4, 222] 
Longoria ['3B', 3, 282] 
Kiermaier ['CF', 1, 240] 
Guyer ['LF', 8, 275] 
Rivera ['C', 9, 194] 
DeJesus ['DH', 6, 299] 
Cabrera ['SS', 7, 214] 
Souza Jr ['RF', 2, 229] 


Today's lineup 

Batting 5: 2B Forythe, curent avg: 304 
Batting 4: 1B Loney, curent avg: 222 
Batting 3: 3B Longoria, curent avg: 282 
Batting 1: CF Kiermaier, curent avg: 240 
Batting 8: LF Guyer, curent avg: 275 
Batting 9: C Rivera, curent avg: 194 
Batting 6: DH DeJesus, curent avg: 299 
Batting 7: SS Cabrera, curent avg: 214 
Batting 2: RF Souza Jr, curent avg: 229 


Lineup change 

Batting 5: 2B Forythe, curent avg: 304 
Batting 9: C Wilson, curent avg: 152 
Batting 4: 1B Loney, curent avg: 222 
Batting 3: 3B Longoria, curent avg: 282 
Batting 1: CF Kiermaier, curent avg: 240 
Batting 8: LF Guyer, curent avg: 275 
Batting 6: DH Bechham, curent avg: 200 
Batting 7: SS Cabrera, curent avg: 214 
Batting 2: RF Souza Jr, curent avg: 229 

回答

4

sorted()需要一個參數,key,這是返回上排序的值的函數。

試試這個:

def key_func(item): 
    value = item[1] 
    order = value[1] 
    return order 
for key, value in sorted(starters.items(), key=key_func): 
    ... 

或者更簡單地說:

for key, value in sorted(starters.items(), key=lambda x: x[1][1]): 
    ... 
+0

,完美的工作。 因此,「x:x [1] [1]」是如何知道調用該特定值的,而不是代碼中數字高得多的擊球平均數#(例如300)。 –

+0

如果你想寫單元測試,提取'key_func'是一個好主意。由於某種原因,Guido使得lambda語法變得醜陋 –