1

それぞれに次のようなデータがある辞書のリストがあります。

'Caitlyn': {'date': (2012, 11, 24), 'player': 'Caitlyn', 'outcome': 'Win', 'gameid': '00006', 'stats': {'assists': 6, 'kills': 13, 'deaths': 4}}

次のような行とデータを含むファイルから各アイテムを生成します。

[00006] Caitlyn - 13/4/6 - Win - 2012-11-24

辞書のリストで一致するプレーヤー名のすべてのインデックスを取得し、それらを印刷および/またはそれらのデータを印刷したいと考えています。すべてのリストを印刷して、ファイルなどに合わせてフォーマットできますが、これで行っている他の検索とは少し異なるため、検索方法がわかりません。

これでデータセット全体を印刷できます(醜いことは知っていますが、機能します):

i = 0
for item in records:
    print "\n", "[%s] %s - %s/%s/%s - %s - %s-%s-%s" % (records[i][0], records[i][1]['player'], records[i][1]['stats']['kills'], records[i][1]['stats']['deaths'], records[i][1]['stats']['assists'], records[i][1]['outcome'], records[i][1]['date'][0], records[i][1]['date'][1], records[i][1]['date'][2])
    i = i + 1

誰でもこれを少し手伝ってもらえますか?プレイヤー名を検索して、その一致ごとに出力できるようにする必要があります (そして、インデックスを返して、検索全体を再度実行する代わりに、一致したセットを他のものに使用できるようにします)、戻りたいと思います。一致のリストなので、それらを並べ替えたり、エクスポートしたりできます。ご協力ありがとうございます。

[編集] これまでのところ、回答よりも多くの質問があるように思われるため、これまでのファイル全体を以下に示します: http://www.pasteall.org/37589/python

これは stats4.txt です: http://www.pasteall.org/37590

4

2 に答える 2

1

こんな意外なところでまた召喚士に会えるのは嬉しい。

特定のチャンピオンとプレイしたすべてのゲームを追跡する場合は、チャンピオン名をキーとし、ゲーム統計のリストを値とする別のディクショナリを作成できます。

コードは次のようになります。

records = {}

for line in data:
    # parsing codes

    # store player -> gameid mappings to the index
    if player not in records:
        records[player] = []
    records[player].append(info)

print records['Sona']
# this should print out list of games played with Sona

この変更により、チャンピオン名でデータにアクセスできるようになりますが、ゲーム ID でソートされなくなります。それでもゲーム ID でデータにアクセスする必要がある場合は、ゲーム ID でデータを保存し、別の辞書を作成してインデックスを作成することをお勧めします。それは、データで何をしたいかによって異なります。

また、このデータを使って本格的な分析を行いたい場合は、標準ライブラリに含まれているsqlite3など、Python 用のデータベース バインディングの使用を検討する必要があります。データベースは、まさにこの種のタスクのために設計されたアプリケーションです。

于 2012-11-28T01:51:26.523 に答える
0

データを再構築するには遅すぎますか?

>>> Caitlyn = {'games': [{'date': (2012, 11, 24),
                      'gameid': '00006',
                      'outcome': 'Win',
                      'stats': {'assists': 6, 'deaths': 4, 'kills': 13}}]}
>>> game02 = {'date': (2012, 11, 24),
              'gameid': '00007',
              'outcome': 'Loss',
              'stats': {'assists': 4, 'deaths': 3, 'kills': 16}}
>>> Caitlyn['games'].append(game02)

プレーヤーごとに辞書のリストを使用し、それらを独自のオブジェクトに保存します。うまくピクルするか、ドキュメントベースの SQL を使用しないデータベースでそのまま使用できます。これにより、これまでに行った作業の多くが削除されますが、その見返りは素晴らしいものです。永続的なストレージ、テキストの解析/書き込みなし、データベース スタイルのロジックを使用して、あなたが話している種類の検索を実行する機能。集計統計は、頭に浮かぶもう 1 つの優れたボーナスです。これは今のところあなたの質問への回答ではありませんが、少なくともこれをオプションとして検討していただければ幸いです。

于 2012-11-28T01:49:37.643 に答える