見出し画像

審判ファンの文系SEがFlaskでプロ野球審判出場記録アプリを作る③【Python】

各ポジション別の出場試合数を取得したい

なんか毎回VScodeのスクショだと味気ないので私の推しの写真を貼ってみました。推し、最近髪型をツーブロックにしてかわいくなりました。白井さんは高校生のときからかわいいなと思って見てて、高校の社会の先生が白井さんに似ていて密かに毎日渡り廊下ですれ違う度にどきどきしていたくらい好きな訳ですが、44歳にしてかわいさだけでなくカッコよさも出てきてちょっとどうしたらいいk…推しの話はここではあまり関係ないのでこの辺りにしておきます。

前回、データベースからループして各年の各審判の出場試合数を取得することに成功したわけですが、全体の出場試合数だけでなく各ポジションごとの出場試合数も審判ファンであれば気になるところです。

WHEREの部分を変数にしてループさせればいけそうです。まずポジションのリストを作成します。

umpire_position = ["球審","一塁","二塁","三塁","線審(左)","線審(右)"]

umpire_positionの数分ループを追加します。

for i in range(len(umpire_name_list)):

     for j in position_list:

         cur.execute("select count(*) from umpire__" + year + " where " + j+ " =                
                     ' " + umpire_name_list[i] + "'")
          

     docs = cur.fetchall()

        for doc in docs:

            game_list.append(game_clear(doc))

printした結果

[24, 24, 25, 26, 0, 1, 23, 23, 23, 20, 0, 1, 24, 25, 25, 29, 1, 3, 24, 25, 25, 25, 1, 0, 24, 26, 26, 23, 0, 1, 23, 22, 25, 24, 1, 0, 22, 20, 19, 21, 0, 0, 19, 20, 20, 17, 1, 0, 11, 9, 10, 10, 0, 0, 25, 25, 26, 26, 1, 0, 12, 14, 14, 14, 0, 0, 25, 24, 24, 25, 0, 0, 23, 25, 23, 24, 0, 0, 20, 21, 21, 25, 0, 1, 23, 25, 21, 21, 1, 0, 24, 25, 25, 26, 1, 2, 19, 18, 24, 24, 1, 0, 26, 24, 23, 25, 1, 0, 18, 16, 17, 18, 0, 0, 22, 20, 22, 23, 1, 0, 25, 27, 23, 22, 1, 0, 12, 14, 15, 10, 0, 0, 25, 22, 24, 22, 0, 0, 22, 25, 25, 23, 0, 1, 18, 20, 20, 18, 0, 0, 6, 3, 2, 4, 0, 0, 24, 24, 24, 23, 1, 0, 25, 26, 26, 24, 1, 1, 26, 24, 25, 26, 1, 1, 27, 25, 23, 25, 1, 1, 25, 23, 24, 24, 0, 1, 23, 24, 26, 27, 0, 1, 25, 25, 26, 25, 0, 1, 25, 25, 21, 23, 2, 0, 23, 22, 23, 25, 0, 0, 22, 23, 24, 22, 0, 0, 26, 24, 24, 21, 0, 1, 21, 20, 19, 20, 1, 1, 8, 9, 10, 7, 0, 0, 7, 7, 5, 4, 0, 0, 13, 16, 12, 14, 0, 0, 17, 17, 17, 21, 0, 0]

リストをn個ずつ分割したい


これを6で割って辞書型に格納すればいいんじゃないか?と思ったのですが複数の値を辞書型に追加するのが意外と難しかったです。簡単にできると思ったのに…!


まずリストを分割するやり方を知りませんでした。こちらのサイトのやり方を参考にさせてもらいました。スライスを使うんですね。初心者はまず文法から学びますが正直こんなスライスとか何に使えるんだとなめていたのですが節々でいぶし銀な活躍をしてくれています。具体的にこういうときに使えるよーって教えて欲しかったです。

後初めて知ったのはlistのこと。

result = list(split_list(l, 3))

listってリスト名=[]って宣言してappendしないと値を追加できないものだとばかり勝手に思っていましたがlist(リストにしたい変数)でリストに変換できるんですね。

#n個ずつに分割してくれる関数
def split_list(l, n):
for idx in range(0, len(l), n):
yield l[idx : idx + n]

result = list(split_list(game_list, 6))

printした結果
[[24, 24, 25, 26, 0, 1], [23, 23, 23, 20, 0, 1], [24, 25, 25, 29, 1, 3], [24, 25, 25, 25, 1, 0], [24, 26, 26, 23, 0, 1], [23, 22, 25, 24, 1, 0], [22, 20, 19, 21, 0, 0], [19, 20, 20, 17, 1, 0], [11, 9, 10, 10, 0, 0], [25, 25, 26, 26, 1, 0], [12, 14, 14, 14, 0, 0], [25, 24, 24, 25, 0, 0], [23, 25, 23, 24, 0, 0], [20, 21, 21, 25, 0, 1], [23, 25, 21, 21, 1, 0], [24, 25, 25, 26, 1, 2], [19, 18, 24, 24, 1, 0], [26, 24, 23, 25, 1, 0], [18, 16, 17, 18, 0, 0], [22, 20, 22, 23, 1, 0], [25, 27, 23, 22, 1, 0], [12, 14, 15, 10, 0, 0], [25, 22, 24, 22, 0, 0], [22, 25, 25, 23, 0, 1], [18, 20, 20, 18, 0, 0], [6, 3, 2, 4, 0, 0], [24, 24, 24, 23, 1, 0], [25, 26, 26, 24, 1, 1], [26, 24, 25, 26, 1, 1], [27, 25, 23, 25, 1, 1], [25, 23, 24, 24, 0, 1], [23, 24, 26, 27, 0, 1], [25, 25, 26, 25, 0, 1], [25, 25, 21, 23, 2, 0], [23, 22, 23, 25, 0, 0], [22, 23, 24, 22, 0, 0], [26, 24, 24, 21, 0, 1], [21, 20, 19, 20, 1, 1], [8, 9, 10, 7, 0, 0], [7, 7, 5, 4, 0, 0], [13, 16, 12, 14, 0, 0], [17, 17, 17, 21, 0, 0]]

for t in range(len(result)):
    umpire_dic.append({umpire_name_list[t]: result[t]})

ここまで来ればあとはループして追記するだけです。

printした結果
[{'丹波': [24, 24, 25, 26, 0, 1]}, {'原': [23, 23, 23, 20, 0, 1]}, {'吉本': [24, 25, 25, 29, 1, 3]}, {'名幸': [24, 25, 25, 25, 1, 0]}, {'土山': [24, 26, 26, 23, 0, 1]}, {'小林': [23, 22, 25, 24, 1, 0]}, {'山口': [22, 20, 19, 21, 0, 0]}, {'山本貴': [19, 20, 20, 17, 1, 0]}, {'山村': [11, 9, 10, 10, 0, 0]}, {'山路': [25, 25, 26, 26, 1, 0]}, {'岩下': [12, 14, 14, 14, 0, 0]}, {'嶋田': [25, 24, 24, 25, 0, 0]}, {'川口': [23, 25, 23, 24, 0, 0]}, {'市川': [20, 21, 21, 25, 0, 1]}, {'敷田': [23, 25, 21, 21, 1, 0]}, {'有隅': [24, 25, 25, 26, 1, 2]}, {'木内': [19, 18, 24, 24, 1, 0]}, {'本田': [26, 24, 23, 25, 1, 0]}, {'杉永': [18, 16, 17, 18, 0, 0]}, {'村山': [22, 20, 22, 23, 1, 0]}, {'栁田': [25, 27, 23, 22, 1, 0]}, {'梅木': [12, 14, 15, 10, 0, 0]}, {'森': [25, 22, 24, 22, 0, 0]}, {'橋本': [22, 25, 25, 23, 0, 1]}, {'橘髙': [18, 20, 20, 18, 0, 0]}, {'水口': [6, 3, 2, 4, 0, 0]}, {'津川': [24, 24, 24, 23, 1, 0]}, {'深谷': [25, 26, 26, 24, 1, 1]}, {'牧田': [26, 24, 25, 26, 1, 1]}, {'白井': [27, 25, 23, 25, 1, 1]}, {'眞鍋': [25, 23, 24, 24, 0, 1]}, {'石山': [23, 24, 26, 27, 0, 1]}, {'福家': [25, 25, 26, 25, 0, 1]}, {'秋村': [25, 25, 21, 23, 2, 0]}, {'笠原': [23, 22, 23, 25, 0, 0]}, {'芦原': [22, 23, 24, 22, 0, 0]}, {'西本': [26, 24, 24, 21, 0, 1]}, {'長井': [21, 20, 19, 20, 1, 1]}, {'長川': [8, 9, 10, 7, 0, 0]}, {'青木': [7, 7, 5, 4, 0, 0]}, {'須山': [13, 16, 12, 14, 0, 0]}, {'飯塚': [17, 17, 17, 21, 0, 0]}]

きれいに各審判員の各ポジション別の出場試合数を辞書型に追加することができました。2021年は白井さんの球審としての出場試合数が多いんですね。

この値をHTMLに渡して表示させればいいのですが、今度はjinja2の書き方が分かんなくてうおおお…ってなっています。リストの中の辞書型のリストはどうやって書けば表示できるのか…次回以降の課題です。

一難去ってまた一難、一つ課題をクリアしてもまた新しい課題が出てくるので「なんでだよ…」となっていますが、人生もそんなもんだと思うので明日以降も頑張ります。

追記:バカじゃん

この記事を書いてさてそろそろ寝ようかと思っていたのですが、jinja2でどう書いたら悩んでるのってリストの中に辞書型を追加してるからなわけでKEYは違う(審判員名)のだからリストの中に追加しなくて普通に辞書型に入れればいいのでは?となりました。

for t in range(len(result)):
    umpire_dic[umpire_name_list[t]] = result[t]

printした結果
umpire_dic={'丹波': [24, 24, 25, 26, 0, 1], '原': [23, 23, 23, 20, 0, 1], '吉本': [24, 25, 25, 29, 1, 3], '名幸': [24, 25, 25, 25, 1, 0], '土山': [24, 26, 26, 23, 0, 1], '小林': [23, 22, 25, 24, 1, 0], '山口': [22, 20, 19, 21, 0, 0], '山本貴': [19, 20, 20, 17, 1, 0], '山村': [11, 9, 10, 10, 0, 0], '山路': [25, 25, 26, 26, 1, 0], '岩下': [12, 14, 14, 14, 0, 0], '嶋田': [25, 24, 24, 25, 0, 0], '川口': [23, 25, 23, 24, 0, 0], '市川': [20, 21, 21, 25, 0, 1], '敷田': [23, 25, 21, 21, 1, 0], '有隅': [24, 25, 25, 26, 1, 2], '木内': [19, 18, 24, 24, 1, 0], '本田': [26, 24, 23, 25, 1, 0], '杉永': [18, 16, 17, 18, 0, 0], '村山': [22, 20, 22, 23, 1, 0], '栁田': [25, 27, 23, 22, 1, 0], '梅木': [12, 14, 15, 10, 0, 0], '森': [25, 22, 24, 22, 0, 0], '橋本': [22, 25, 25, 23, 0, 1], '橘髙': [18, 20, 20, 18, 0, 0], '水口': [6, 3, 2, 4, 0, 0], '津川': [24, 24, 24, 23, 1, 0], '深谷': [25, 26, 26, 24, 1, 1], '牧田': [26, 24, 25, 26, 1, 1], '白井': [27, 25, 23, 25, 1, 1], '眞鍋': [25, 23, 24, 24, 0, 1], '石山': [23, 24, 26, 27, 0, 1], '福家': [25, 25, 26, 25, 0, 1], '秋村': [25, 25, 21, 23, 2, 0], '笠原': [23, 22, 23, 25, 0, 0], '芦原': [22, 23, 24, 22, 0, 0], '西本': [26, 24, 24, 21, 0, 1], '長井': [21, 20, 19, 20, 1, 1], '長川': [8, 9, 10, 7, 0, 0], '青木': [7, 7, 5, 4, 0, 0], '須山': [13, 16, 12, 14, 0, 0], '飯塚': [17, 17, 17, 21, 0, 0]}

Seleniumでデータを取得するときはKEYが被ってしまうのでリストに入れていました。危ない、無駄な苦労をするところだった。ただの辞書型だったら楽勝ですね(フラグ)!!!

この記事が気に入ったらサポートをしてみませんか?