2016-03-30 7 views
1

このトピックに関する他の質問があります。しかし、私はそれらの答えを自分のコードに適合させることに失敗しました。私が援助を必要とするのは、辞書コードを中位の値であるバッティングオーダーで辞書をソートする2番目と3番目の印刷機能で辞書をソートすることです。 ['DH'、,29]。次のように私のコードは次のとおりです。値で辞書を並べ替えるのが難しいです

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'を抜き出すことは、単体テストを書くことができるようにしたいなら、素晴らしいアイデアです。グイドは、理由のためにラムダ構文を醜いものにした –

関連する問題