如何创建一个包含分数的dict/查询列表,然后随机选择一些来添加分数?

2024-09-28 22:32:17 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一些.csv数据:

query, score1, score2, score3

kobe bryant,0,3,1,
ccny,1,1,2,
lego,3,1,0,
disney,4,0,0,
power rangers,2,0,2,
britney spears,2,0,2,
backstreet boys,2,1,1,
soccer,3,0,1,
justin beaver,2,0,2,
new york knicks,2,1,1

把分数加起来后,我希望得到如下结果:

score1 = 10; score2 = 4; score3 18;

我该怎么把这些分开,再加起来呢?你知道吗

以下是我目前掌握的情况:

import random

def getScores():
    # open files to read
    web = open("page.txt", "r");
    img = open("image.txt", "r");

    # scores for each search engine results
    gScore = 0;
    bScore = 0;
    yScore = 0;

    webDict = [];
    imgDict = [];

    # split by ','
    tmp = img.read().split(",");
for i in range(0, len(tmp)-4, 4):
        gScore = gScore + int(tmp[i+1]);
        bScore = bScore + int(tmp[i+2]);
        yScore = yScore + int(tmp[i+3]);

    print "gScore is: ", gScore, "\n";
    print "bScore is: ", bScore, "\n";
    print "yScore is: ", yScore, "\n";  

    tmp = web.read().split(",");
    for i in range(0, len(tmp)-4, 4):
        gScore = gScore + int(tmp[i+1]);
        bScore = bScore + int(tmp[i+2]);
        yScore = yScore + int(tmp[i+3]);

print "gScore is: ", gScore, "\n";
    print "bScore is: ", bScore, "\n";
    print "yScore is: ", yScore, "\n";  

if __name__ == "__main__":
    getScores();

这将加起来所有的分数,但我有困难创建一个dict从数据。你知道吗

我的意思是这样的:

bigList = [ 'query':{score1:int, score2:int, score3:int}, 'query2':{score1:int, score2:int, score3:int}... and so on];

Tags: 数据forreadisopentmpintsplit
2条回答

我先用逗号把字符串分开:

stuff = 'kobe bryant,0,3,1,ccny,1,1,2,lego,3,1,0,disney,4,0,0,power rangers,2,0,2,britney spears,2,0,2,backstreet boys,2,1,1,soccer,3,0,1,justin beaver,2,0,2,new york knicks,2,1,1'
parts = stuff.split(',')

len(parts)应该是4的倍数,否则可以引发异常:

if len(parts)%4:
   raise ValueError('bad csv')

然后像这样做:

d = {'score1': 0, 'score2': 0, 'score3': 0}
for i in range(len(parts)/4):
     d['score1'] += int(parts[4*i+1])
     d['score2'] += int(parts[4*i+2])
     d['score3'] += int(parts[4*i+3])

print d

我明白了

{'score1': 21, 'score2': 7, 'score3': 12}

在逗号处拆分后,可以很容易地在一行中进行处理:

gScore, bScore, yScore =  
          [sum(map(int, scores)) for scores in (data[n::4] for n in range(1, 4))]

data[::4]部分从数据中选取每4项,从每种类型分数的适当偏移量开始。然后将每种类型转换为整数并求和。你知道吗

相关问题 更多 >