First we find the maximum val
In [203]: from operator import itemgetter In [204]: max_val = max(students, key=itemgetter('val'))['val']
then we select all elements with maximum val
In [205]: [x for x in students if x['val'] == max_val] Out[205]: [{'name': 'Natallia', 'subj': 'Subj2', 'val': 10}, {'name': 'Nikodim', 'subj': 'Subj2', 'val': 10}]
The solution using the Pandas module will most likely work much faster for large amounts of data:
In [254]: import pandas as pd In [255]: df = pd.DataFrame(students) In [256]: df Out[256]: name subj val 0 Alex Subj2 8 1 Natallia Subj2 10 2 Nikodim Subj2 10 In [257]: df.nlargest(1, columns='val') Out[257]: name subj val 1 Natallia Subj2 10 2 Nikodim Subj2 10 In [258]: df.nlargest(1, columns='val').to_dict('r') Out[258]: [{'name': 'Natallia', 'subj': 'Subj2', 'val': 10}, {'name': 'Nikodim', 'subj': 'Subj2', 'val': 10}]