Самая большая проблема - ваша структура данных - вы храните значения в отдельных списках, но вся информация об одном ученике должна быть в одном словаре или списке, и тогда это будет намного проще.
Примерно так:
studends = [
{'Name': 'Colin', 'FirstName': 'Jonas', 'TP01': '7', 'TP02': '12', 'TP03': '11', 'EXAMEN_INTRA': '22', 'EXAMEN_FINAL': '28'},
{'Name': 'Doyon', 'FirstName': 'Elisabeth', ....},
...
]
Этот код получает все результаты с sum > 30
, но возвращает каждого учащегося в отдельном списке - поэтому, если вам нужна исходная структура, вам придется преобразовать результат.
dict_etudiants = {
'Name': ['Colin', 'Doyon', 'Tremblay', 'Audry', 'Gamelin', 'Dagenais', 'Legault',
'Larochelle', 'Gagnon', 'Simard'],
'FirstName': ['Jonas', 'Elisabeth', 'Françcois', 'Francine', 'Geneviève',
'Robert', 'Maxime', 'Pierre', 'Emilie', 'Martine'],
'TP01': ['7', '9.5', '8', '5', '6', '8', '10', '3', '7', '8'],
'TP02': ['12', '14', '12', '13', '10', '12', '14', '11', '10', '15'],
'TP03': ['11', '12', '11', '10', '10', '13', '12', '6', '7', '14'],
'EXAMEN_INTRA': ['22', '26', '20', '22', '20', '23', '27', '15', '13', '28'],
'EXAMEN_FINAL': ['28', '20', '22', '15', '14', '22', '25', '14', '14', '27']
}
students = list()
for tp1, tp2, tp3, name, firstname, examen_intra, examen_final in zip(dict_etudiants['TP01'], dict_etudiants['TP02'], dict_etudiants['TP03'],
dict_etudiants['Name'], dict_etudiants['FirstName'], dict_etudiants['EXAMEN_INTRA'], dict_etudiants['EXAMEN_FINAL']):
if sum((float(tp1), float(tp2), float(tp3))) > 30:
students.append([name, firstname, tp1, tp2, tp3, examen_intra, examen_final])
print(students)
Результат
[
['Doyon', 'Elisabeth', '9.5', '14', '12', '26', '20'],
['Tremblay', 'Françcois', '8', '12', '11', '20', '22'],
['Dagenais', 'Robert', '8', '12', '13', '23', '22'],
['Legault', 'Maxime', '10', '14', '12', '27', '25'],
['Simard', 'Martine', '8', '15', '14', '28', '27']
]
РЕДАКТИРОВАТЬ: Я выпустил, что вы можете преобразовать его в pandas.DataFrame
, и тогда будет легко искать студентов.
result = df[ df['TP01'] + df['TP02'] + df['TP03'] > 30 ]
Полный код
dict_etudiants = {
'Name': ['Colin', 'Doyon', 'Tremblay', 'Audry', 'Gamelin', 'Dagenais', 'Legault',
'Larochelle', 'Gagnon', 'Simard'],
'FirstName': ['Jonas', 'Elisabeth', 'Françcois', 'Francine', 'Geneviève',
'Robert', 'Maxime', 'Pierre', 'Emilie', 'Martine'],
'TP01': ['7', '9.5', '8', '5', '6', '8', '10', '3', '7', '8'],
'TP02': ['12', '14', '12', '13', '10', '12', '14', '11', '10', '15'],
'TP03': ['11', '12', '11', '10', '10', '13', '12', '6', '7', '14'],
'EXAMEN_INTRA': ['22', '26', '20', '22', '20', '23', '27', '15', '13', '28'],
'EXAMEN_FINAL': ['28', '20', '22', '15', '14', '22', '25', '14', '14', '27']
}
import pandas as pd
import pprint
# create DateFrame
df = pd.DataFrame(dict_etudiants)
# convert strings to float
df['TP01'] = df['TP01'].astype(float)
df['TP02'] = df['TP02'].astype(float)
df['TP03'] = df['TP03'].astype(float)
# search students
result = df[ df['TP01'] + df['TP02'] + df['TP03'] > 30 ]
# convert back to dictionary
dict_etudiants_selected = result.to_dict(orient='list')
print('\n--- DataFrame ---\n')
print(result)
print('\n--- dict ---\n')
pprint.pprint(dict_etudiants_selected)
Результат
--- DataFrame ---
Name FirstName TP01 TP02 TP03 EXAMEN_INTRA EXAMEN_FINAL
1 Doyon Elisabeth 9.5 14.0 12.0 26 20
2 Tremblay Françcois 8.0 12.0 11.0 20 22
5 Dagenais Robert 8.0 12.0 13.0 23 22
6 Legault Maxime 10.0 14.0 12.0 27 25
9 Simard Martine 8.0 15.0 14.0 28 27
--- dict ---
{'EXAMEN_FINAL': ['20', '22', '22', '25', '27'],
'EXAMEN_INTRA': ['26', '20', '23', '27', '28'],
'FirstName': ['Elisabeth', 'Françcois', 'Robert', 'Maxime', 'Martine'],
'Name': ['Doyon', 'Tremblay', 'Dagenais', 'Legault', 'Simard'],
'TP01': [9.5, 8.0, 8.0, 10.0, 8.0],
'TP02': [14.0, 12.0, 12.0, 14.0, 15.0],
'TP03': [12.0, 11.0, 13.0, 12.0, 14.0]}