Terr_code Terr_code - 7 months ago 13
Python Question

how do i divide list into smallers list

My list is formatted
gymnastics_school,participant_name,all-around_points_earned
I need to divide it up by schools but also keep the scores

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))


these are examples of how they're set up

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


etc

should look like

Lanier City Gymnastics:participants(4)


as it own list

Carrollton Boys(3)


as it own list

La Fayette Boys(6)


etc

M.T M.T
Answer

I would recommend putting them in 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:]]

Then access schools could be done in the following way:

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

EDIT: Assuming you need the whole dataset as a list first, then you want to divide it into smaller lists you can generate the dictionary from the list:

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]] 

When you need to get a subset of a list you can use slicing:

mylist[start:stop:step] 

where start, stop and step are optional (see link for more comprehensive introduction)

Comments