如何从这样的代码中获取最大值和最小值:
[{'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'}]
关于Python 从字典列表中获取最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507399/