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