Sorting Scores And Names Alphabetical, Average, Highest To Lowest
Back again with another question about my project. So I've tried to sort my scores in descending order in my text file. However, it outputs a syntax error. The filename is created
Solution 1:
The first open, try:
with open(filename, 'a+') as write_file:
....
then the second open do:
with open(filename, 'r+') as read_file:
...
Maybe it will work
EDIT
Now regarding first your file parsing and the sorting methods, I came up with this:
from collections import defaultdict
from collections import OrderedDict
filename = 'file.txt'
def alphabetically(some_data):
return OrderedDict(
(k, some_data[k]['scores'])
for k in sorted(some_data)
)
def by_score(some_data, descending=True):
return OrderedDict(
(k, sum(some_data[k]['scores']))
for k in sorted(some_data,
key=lambda k: sum(some_data[k]['scores']),
reverse=descending)
)
def by_average(some_data, descending=True):
def average(scores):
return float(sum(scores)) / len(scores)
return OrderedDict(
(k, average(some_data[k]['scores']))
for k in sorted(some_data,
key=lambda k: average(some_data[k]['scores']),
reverse=descending)
)
data = defaultdict(dict)
with open(filename, 'r+') as f:
for line in f.read().splitlines():
name, score = line.split(' : ')
scores = data[name].get('scores', [])
scores.append(int(score))
data[name]['scores'] = scores
print alphabetically(data)
print by_score(data)
print by_average(data)
Output:
OrderedDict([('ADAM', [2]), ('Da', [3, 0, 1]), ('Dadsid', [4]), ('Davd', [3, 4]), ('Dliid', [9]), ('Dloed', [1]), ('Dsid', [3]), ('lukedd', [8]), ('mathe', [4, 12])])
OrderedDict([('mathe', 16), ('Dliid', 9), ('lukedd', 8), ('Davd', 7), ('Da', 4), ('Dadsid', 4), ('Dsid', 3), ('ADAM', 2), ('Dloed', 1)])
OrderedDict([('Dliid', 9.0), ('lukedd', 8.0), ('mathe', 8.0), ('Dadsid', 4.0), ('Davd', 3.5), ('Dsid', 3.0), ('ADAM', 2.0), ('Da', 1.3333333333333333), ('Dloed', 1.0)])
Post a Comment for "Sorting Scores And Names Alphabetical, Average, Highest To Lowest"