Skip to main content
 首页 » 编程设计

Python 从字典列表中获取最大值和最小值

2025年05月04日14daizhj

如何从这样的代码中获取最大值和最小值:

[{'sum': 44, 'code': 'A'},  
{'sum': 1,   'code': 'B'},  
{'sum': 44,  'code': 'B'},  
{'sum': 33,  'code': 'B'},  
{'sum': 2,   'code': 'C'},  
{'sum': 694, 'code': 'A'},  
{'sum': 12,  'code': 'B'},  
{'sum': 5,   'code': 'C'}] 

我需要这样的结果:

#max 
[{'sum': 694, 'code': 'A'}, 
{'sum': 44,  'code': 'B'}, 
{'sum': 5,   'code': 'C'}] 
 
#min 
[{'sum': 44, 'code': 'A'}, 
{'sum': 1,  'code': 'B'}, 
{'sum': 2,   'code': 'C'}] 

请您参考如下方法:

你可以使用 itertools.groupby cf。 How do I use Python's itertools.groupby()?有关详细信息,以及 max 的关键参数。这是一个简短的代码:

from itertools import groupby 
 
 
input = [ 
    {'sum': 44, 'code': 'A'},  
    {'sum': 1,   'code': 'B'},  
    {'sum': 44,  'code': 'B'},  
    {'sum': 33,  'code': 'B'},  
    {'sum': 2,   'code': 'C'},  
    {'sum': 694, 'code': 'A'},  
    {'sum': 12,  'code': 'B'},  
    {'sum': 5,   'code': 'C'} 
] 
 
# groupby requires its input to be sorted by group key 
input.sort(key=lambda x: (x['code'], x['sum']) 
 
maximums = list() 
minimums = list() 
 
for code, group in groupby(input, key=lambda x: x['code']): 
    group = list(group)  # Consume iterator 
    maximums.append(group[-1]) 
    minimums.append(group[0]) 
 
print 'max:', maximums 
print 'min:', minimums 

这会让你:

max: [{'sum': 694, 'code': 'A'}, {'sum': 44, 'code': 'B'}, {'sum': 5, 'code': 'C'}] 
min: [{'sum': 44, 'code': 'A'}, {'sum': 1, 'code': 'B'}, {'sum': 2, 'code': 'C'}]