質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1024閲覧

APIから取得したデータから特定のデータを取り出したい。

grilled_python

総合スコア237

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/05/06 07:49

Python3.6

riot apiというapiから勝率などを計算するためゲームの対戦データを取得しました。
LOLというゲームで10人、5vs5で行う対戦ゲームです。

プレイヤー1~10の全て情報の中から
8項目のデータを取得したいのです。

取得したデータはこの様な形で書かれています。

[{ 'gameId': 3194473783, 'platformId': 'KR', 'gameCreation': 1525506476785, 'gameDuration': 1751, 'queueId': 420, 'mapId': 11, 'seasonId': 11, 'gameVersion': '8.9.228.4283', 'gameMode': 'CLASSIC', 'gameType': 'MATCHED_GAME', 'teams': [{ 'teamId': 100, 'win': 'Fail', 'firstBlood': False, 'firstTower': False, 'firstInhibitor': False, 'firstBaron': False, 'firstDragon': False, 'firstRiftHerald': False, ・ ・ ・ このように続きます。

変数 match_detailにデータを格納
格納したデータから必要な項目を一つづつ取り出すとこうなります。
これをまとめて、10人分取り出すにはどのような式になるでしょうか?
よろしくおねがいいたします。

python

1a1 = match_detail[0]['gameId'] 2b1 = match_detail[0]['participants'][0]['participantId'] 3c1 = match_detail[0]['participants'][0]['teamId'] 4d1 = match_detail[0]['participants'][0]['championId'] 5e1 = match_detail[0]['participants'][0]['stats']['win'] 6f1 = match_detail[0]['participants'][0]['timeline']['lane'] 7g1 = match_detail[0]['participantIdentities'][0]['player']['summonerId'] 8# #player1の情報 9 10 11a2 = match_detail[0]['gameId'] 12b2 = match_detail[0]['participants'][1]['participantId'] 13c2 = match_detail[0]['participants'][1]['teamId'] 14d2 = match_detail[0]['participants'][1]['championId'] 15e2 = match_detail[0]['participants'][1]['stats']['win'] 16f2 = match_detail[0]['participants'][1]['timeline']['lane'] 17g2 = match_detail[0]['participantIdentities'][1]['player']['summonerId'] 18# #player2の情報 19 20print(a1, b1, c1, d1, e1, f1, g1,) 21#3194473783 1 100 163 False MIDDLE 9314645 22 23print(a2, b2, c2, d2, e2, f2, g2,) 24#3194473783 2 100 121 False JUNGLE 69620201 25 26

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

素直に書くならこんな感じになるでしょうね。

Python

1game_id = match_detail[0]['gameId'] 2participants = match_detail[0]['participants'] 3participant_identities = match_detail[0]['participantIdentities'] 4 5match_data = [] 6for player_id in range(10): 7 participant = participants[player_id] 8 participant_identity = participant_identities[player_id] 9 10 match_data.append(( 11 game_id, 12 participant['participantId'], 13 participant['teamId'], 14 participant['championId'], 15 participant['stats']['win'], 16 participant['timeline']['lane'], 17 participant_identity['player']['summonerId'] 18 ))

playerNの情報はmatch_data[N-1]に入っています。

ただ、後で**『やっぱりこれも必要だった!』**となるのは虚しいので、
よほど容量がでかくない限りはAPIの返したデータをそのまま保持すればいいのでは。

投稿2018/05/06 08:22

編集2018/05/06 08:29
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grilled_python

2018/05/06 08:40

ありがとうございます。勉強になります。 「よほど容量がでかくない限りはAPIの返したデータをそのまま保持すればいいのでは」 との事ですが、そのままデータを保持するとはどういう意味でしょうか?
LouiS0616

2018/05/06 08:46

今回の場合、APIの返したmatch_dataのデータをいわば『削減』して新たなリストを作りました。 が、そもそも削減するメリットがあまりないので、必要なときにmatch_dataから値を取り出せば良いような気がします。 良く取り出すデータについてはユーティリティ関数を用意しても良いでしょう。 ちょっと中身を見てみたいだけだったら、for文内で直接出力すれば良いです。
grilled_python

2018/05/06 08:54

なるほどそういう意味だったんですね。理解できました。8項目しか使わないので取り出してしまおうと考えたのが浅はかでした。直接呼び出してその都度使えるようにしたいと思います。 ありがとうございます!!
LouiS0616

2018/05/06 08:58

最初から最後までその8項目しか使わないのなら、新しく辞書を作っちゃっても良いですけどね。 ただしその場合、後で必要な項目が増えたときの出戻りが生じることにご注意を。
grilled_python

2018/05/06 09:09

ご丁寧にありがとうございます。教えて頂いた式を参考に新しいデータも取得してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問