2016-04-22 64 views
0

我的目录的格式如下:我如何划分列表分为smallers列表

gymnastics_school,participant_name,all-around_points_earned 

我需要学校把它瓜分,但保持得分。

import collections 

def main(): 
    names = ["gymnastics_school", "participant_name", "all_around_points_earned"] 
    Data = collections.namedtuple("Data", names)  
    data = [] 

    with open('state_meet.txt','r') as f: 
     for line in f: 
      line = line.strip() 
      items = line.split(',') 
      items[2] = float(items[2]) 
      data.append(Data(*items)) 

这些都是它们是如何设置的例子:

Lanier City Gymnastics,Ben W.,55.301 
Lanier City Gymnastics,Alex W.,54.801 
Lanier City Gymnastics,Sky T.,51.2 
Lanier City Gymnastics,William G.,47.3 
Carrollton Boys,Cameron M.,61.6 
Carrollton Boys,Zachary W.,58.7 
Carrollton Boys,Samuel B.,58.6 
La Fayette Boys,Nate S.,63 
La Fayette Boys,Kaden C.,62 
La Fayette Boys,Cohan S.,59.1 
La Fayette Boys,Cooper J.,56.101 
La Fayette Boys,Avi F.,53.401 
La Fayette Boys,Frederic T.,53.201 
Columbus,Noah B.,50.3 
Savannah Metro,Levi B.,52.801 
Savannah Metro,Taylan T.,52 
Savannah Metro,Jacob S.,51.5 
SAAB Gymnastics,Dawson B.,58.1 
SAAB Gymnastics,Dean S.,57.901 
SAAB Gymnastics,William L.,57.101 
SAAB Gymnastics,Lex L.,52.501 
Suwanee Gymnastics,Colin K.,57.3 
Suwanee Gymnastics,Matthew B.,53.201 

处理它应该看起来像后:

Lanier City Gymnastics:participants(4) 

,因为它自己的名单

Carrollton Boys(3) 

作为它自己的名单

La Fayette Boys(6) 

+1

如果压缩列表只是,容参与者算,你怎么保持得分分别? – Rockybilly

回答

0

我会建议他们将在dictionaries

data = {} 

with open('state_meet.txt','r') as f: 
    for line in f: 
     line = line.strip() 
     items = line.split(',') 
     items[2] = float(items[2]) 
     if items[0] in data: 
      data[items[0]].append(items[1:]) 
     else: 
      data[items[0]] = [items[1:]] 

然后进入学校可以通过以下方式进行:

>>> data['Lanier City Gymnastics'] 
[['Ben W.',55.301],['Alex W.',54.801],['Sky T'.,51.2],['William G.',47.3] 

编辑: 假设您需要整个数据集作为一个列表,然后再要将其分割成更小的列表中,您可以生成从列表中词典:

data = [] 

with open('state_meet.txt','r') as f: 
    for line in f: 
     line = line.strip() 
     items = line.split(',') 
     items[2] = float(items[2]) 
     data.append(items) 

#perform median or other operation on your data 

nested_data = {}   
for items in data: 
    if items[0] in data: 
     data[items[0]].append(items[1:]) 
    else: 
     data[items[0]] = [items[1:]] 

    nested_data[item[0]] 

当你需要让你可以用切片列表的一个子集:

mylist[start:stop:step] 

其中startstopstep是可选的(见link更全面的介绍)

+0

但我必须首先使用清单作为一个整体来找到平均中位数的第一个和最后一个分数,然后让他们回到学校,并找到平均每个学校的第一个和最后一个中位数 –

+0

你是theGOAT非常感谢 –

+0

嘿我得到一个错误 –