1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
import csv
# la liste des champs tels qu'ils apparaissent dans le fichier de données
champs = ['Journee', 'ClubDomicile', 'ClubExterieur', 'ButsClubDomicile', 'ButsClubExterieur', 'Date']
# on ouvre le fichier, on en fait une liste de dictionnaires, de telle manière qu'on obtient quelque chose comme :
# [
# {
# 'ButsClubDomicile': '1',
# 'ClubExterieur': 'Paris',
# 'ButsClubExterieur': '1',
# 'Journee': '1',
# 'Date': '09/08/2013',
# 'ClubDomicile': 'Montpellier'
# }, {
# 'ButsClubDomicile': '3',
# etc.
# ]
# note que les champs sont dans le désordre comme disait Clodion, mais ici ca n'est pas un probleme
datas = [dict(zip(champs, ligne)) for ligne in csv.reader(open('ligue1.data', 'r'))]
# on crée dynamiquement la liste des clubs en les prenant directement dans le fichier, le casting en set() permet d'eliminer les doublons
# on se retrouve donc avec une liste du genre : ['Lorient', 'Sochaux', 'Toulouse', 'Montpellier', 'Lille', 'Paris', 'Valenciennes', 'Evian']
ListeClubs = list(set([i['ClubDomicile'] for i in datas] + [i['ClubExterieur'] for i in datas]))
# plutot que d'avoir des fonctions qui retournent le resultat pour 1 club a chaque fois, on crée 4 tableaux (dictionnaires)
# indexés par le nom du club, du coup ButsMarquesDomicile ressemble à quelque chose comme ça :
# {
# 'Lorient': 18,
# 'Sochaux': 0,
# 'Toulouse': 0,
# etc.
# 'Evian': 1
# }
ButsMarquesDomicile = dict(zip(ListeClubs, [sum([int(i['ButsClubDomicile']) for i in datas if i['ClubDomicile'] == club]) for club in ListeClubs]))
ButsMarquesExterieur = dict(zip(ListeClubs, [sum([int(i['ButsClubExterieur']) for i in datas if i['ClubExterieur'] == club]) for club in ListeClubs]))
ButsEncaissesDomicile = dict(zip(ListeClubs, [sum([int(i['ButsClubExterieur']) for i in datas if i['ClubDomicile'] == club]) for club in ListeClubs]))
ButsEncaissesExterieur = dict(zip(ListeClubs, [sum([int(i['ButsClubDomicile']) for i in datas if i['ClubExterieur'] == club]) for club in ListeClubs]))
# et enfin on crée de la même manière un dictionnaire contenant les goalavg de chaque club, c'est le tableau qu'utilisait tyrtamos pour faire son tri
# donc on demande la valeur pour un club donné, genre GoalAverage['Valenciennes']
GoalAverage = dict(zip(listeclubs, [(ButsMarquesDomicile[i]+ButsMarquesExterieur[i])-(ButsEncaissesDomicile[i]+ButsEncaissesExterieur[i]) for i in ListeClubs]))
# et donc le classement, soit une liste qui ressemble à : ['Valenciennes', 'Lille', 'Sochaux', 'Montpellier', 'Paris', 'Evian', 'Toulouse', 'Lorient']
classement = sorted(ListeClubs, key=lambda x: GoalAverage[x], reverse=True) |