Установить значение dict для количества раз, когда он вставил питон? - PullRequest
0 голосов
/ 05 марта 2012

Я имею дело со списком игр и хотел выяснить, какой игрок выиграл больше всего игр, используя python. Я полагал, что структура данных типа мультимножества (C ++) облегчит задачу, поскольку каждый ключ уникален, но он подсчитывает, сколько раз элемент был нажат в диктовке. Я начал реализовывать это сам, после того, как мне не удалось найти что-либо говорящее о них в поисках.

Есть ли более простой способ, где вы можете установить значение 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 ]

2 голосов
/ 05 марта 2012

Вы ищете 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()
1 голос
/ 05 марта 2012

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...