2012-03-05 1 views
0

私はゲームのリストを扱っていて、どのプレイヤーが最も多くのゲームで勝ったのかを知りたいと思っていました。私はマルチセット(C++)型のデータ構造は、各キーがユニークであるために簡単になると考えていましたが、アイテムがディクテーション内で何回押されたのかを数えます。私は検索でそれらについて話しているものが見つからなかったので、私は自分でそれを実装し始めました。dictの値をPythonに挿入する回数に設定しますか?

dictの値を、私がしたようにリストを使用する代わりに、キーが何回追加されたかのカウントに設定できる簡単な方法はありますか?

## logFiles is just a list of json files for each game. 
winnerList = [] 
winnerDict = {} 
if len(logFiles): 
    for logFile in logFiles: 
     jsonData = json.load(open("logs/" + logFile, 'r')) 
     winnerList.append(str(jsonData[6]['winner'])) 
    for winner in winnerList: 
     winnerDict[winner] = winnerList.count(winner) 

答えて

2

あなたはcollections.Counterを探しています:

import collections,json,os.path 
winners = collections.Counter() 
for logFile in logFiles: 
    with open(os.path.join("logs", logFile), 'r') as jsonf: 
     jsonData = json.load(jsonf) 
    winner = str(jsonData[6]['winner']) 
    winners[winner] += 1 
winnerList = list(winners.keys()) 
bestPlayers = winners.most_common() 
+0

を使用することができます。 collections.Counter()を使用しようとすると、Python 2.5と2.6の両方を差分のコンピュータで実行していると言わなければなりません。 トレースバック(最後の最新の呼び出し): ファイル "./topChamp.cgi"、8行目、 受賞者で= collections.Counter() はAttributeError: 'モジュール' オブジェクトが2.5のサポートについては何の属性 'カウンター' を – LF4

+0

ありません単に[このレシピ](http://code.activestate.com/recipes/576611/)をコピーするだけです。 – phihag

1

あなたは、私が望んでいた、まさに偉大に見えますが、私はトレースバックの問題を取得していますdict.setdefault

winnerDict = {} 
if len(logFiles): 
    for logFile in logFiles: 
     jsonData = json.load(open("logs/" + logFile, 'r')) 
     winner = str(jsonData[6]['winner']) 
     winnerDict.setdefault(winner,0) 
     winnerDict[winner] += 1 
関連する問題