辞書型データの中から、Value値が最大のKey値を抽出する
東京大学のデータサイエンティスト育成講座の課題、総合問題9-1をやっていて、辞書型データの中から、Value値が最大のKey値を抽出する方法について、理解につまづいたので、まとめました。
# 辞書型のデータ results = {('85123A', 22423): 0.013, ('85123A', '85099B'): 0.014, ('85123A', 84879): 0.015, # Value値が最大 ('85123A', 20725): 0.012, ('85123A', 22720): 0.011, ('85123A', 20727): 0.010, ('85123A', 'POST'): 0.001, ('85123A', 23203): 0.007, ('85123A', 22383): 0.011, ('85123A', 22197): 0.010, ('85123A', 21212): 0.008, ('85123A', 23209): 0.008, ('85123A', 23298): 0.009, ('85123A', 22086): 0.006, ('85123A', 22382): 0.010, (22423, '85099B'): 0.009}
①テキストに書いてあったコード
maxKey = max([(v,k) for k,v in results.items()])[1] maxKey
出力結果 辞書型データのValue値が最大の0.015のKey値が出力される ('85123A', 84879)
①は正しい結果が出力されるのですが、max()の後にValue値を出すための配列指定[1]があるところが、 イメージしづらくてつまづきました。
②下記サイトを参考にしたコード
# Value値が最大となるStockCodeの組み合わせを抽出 maxKey = [k for k, v in results.items() if v == max(results.values())][0] maxKey
出力結果 同じく、辞書型データのValue値が最大の0.015のKey値が出力される ('85123A', 84879)
参考 note.nkmk.me
個人的には、②のコードのほうが、v に代入された バリュー値と、 max(results.values())によって算定されたバリュー値の最大値が一致する k(Key値)をすっきり表している気がして 個人的には好みです。
もちろんどちらも正しい結果が出力されるわけですが。
以上になります、最後までお読みいただきありがとうございます。