2016-12-14 23 views
1

今までのところ、私はまだこれを理解できません。どんな援助も、誰でも提供できるものは大いに感謝されるでしょう。ありがとうございます。時間ごとに各サブリストの項目ごとにプリントアウト

stats.append({ 
       'rounds' : round_playing, 
       'round' : [{'name' : str(list_players[i]['name']), 
          'score' : list_players[i]['score'] 
          }] 
       }) 

list_players:

list_players.append({'name': '', 
      'score': 0}) 

プリントアウト:現在

for s in stats: 
      print("*************************************") 
      print("Round: " + str(s['rounds'])) 
      print("*************************************") 
      for p in s['round']: 
       print("@" + str(p['name']) 
        + "\nScore: " + str(p['score'])+ "\n") 

     print("*********************") 

============================ 
Round 1 
============================ 
Player1 
Score: 11 

============================ 
Round 1 
============================ 
Player2 
Score: 23 

望ましい結果は:

def buildList(p): 
    for i in range(len(p)): 
     list_players.append({'name': '', 'score': 0}) 

わからない:

============================ 
Round 1 
============================ 
Player1 
Score: 11 

Player2 
Score: 23 

============================ 
Round 2 
============================ 
Player1 
Score: 55 

Player2 
Score: 7 

誰かがこのような何かを示唆しました。

+2

データは常に1項目のリストです。あなたは基本的に各dictエントリーにプレーヤーを派遣し、それらを集めるわけではありません。 –

+2

投稿したコードはそのままでは実行されず、質問のデータでサンプル出力を作成するには不十分です。適切な助けを得るためには、適切な[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve)を作成して投稿してください。詳細を知るには、この重要なリンクをお読みください。 – dsh

+0

@ Jean-FrançoisFabre、どうすればそれらを集めるべきですか? –

答えて

3

TL; DR - statsにシングルプレーヤーのエントリを追加しないでください。代わりに、各ラウンドの完全なデータ(すべてのプレーヤー)を追加します。


コードの問題は、データ構造が正しく使用されていないために正しい方法でデータを印刷できないことです。コメントで述べたように、statsの各要素のrounds値の長さは、常に1であり、そのような出力が得られます。

それはstatsのためにこのようなデータ構造を使用しても大丈夫ですが、それはおそらくあなたがあなたのデータを印刷したいフォーマット与えられた最高のアイデアではありません。それは、の方が良いですが、1回のラウンドに対応するすべてのデータを収集します。だから私の答えは、単一のラウンドに集められたすべてのデータをstatsという単一の要素にすることです。

昇天 - 私はあなたがstatsを構築しているようlist_playersが新しいデータで動的に更新されるという仮定を行います。

建物list_players - リスト全体を実行する予定であるため、そのまま使用してください。

ビルstats - あなたのラウンド数は常に1から始め、順次成長されている場合は、あなたは、単にインデックスiがラウンドi+1を表しリストを作ることができます。より複雑なラウンドネームがある場合は、のキーをラウンドナンバーとして辞書を使用すると、特定のラウンドナンバーの統計情報に簡単にアクセスできるようになります。

また、同一のデータ構造を構築しているので、ループを実行する代わりに、list_playersを直接コピーすることもできます。

一覧で

、辞書と

for round in range(0, total_rounds): 
    # Modify scores in `list_players` correctly 
    # You have to copy the whole list, since `list_players` will 
    # change over the course loop 
    stats.append(list_players[:]) 

stats = {} 
for round in round_numbers: 
    # Modify scores of `list_players` correctly 
    # Again, make sure you copy the list as it's dynamic 
    stats[round] = list_players[:] 

結果を印刷する - statsがリストとして保持されている場合は

、私はenumerate()を使用しました関数。辞書と

for index, round in enumerate(stats): 
    # Always use 4 space indentation 
    print("*************************************") 
    print("Round: " + str(index+1) 
    print("*************************************") 
    for p in round: 
     print("@" + str(p['name']) + 
       "\nScore: " + str(p['score'])+ "\n") 
     print("*********************") 

、round` `が指す

for key, value in stats.iteritems(): 
    # Always use 4 space indentation 
    print("*************************************") 
    print("Round: " + str(key) 
    print("*************************************") 
    for p in value: 
     print("@" + str(p['name']) + 
       "\nScore: " + str(p['score'])+ "\n") 
     print("*********************") 
関連する問題