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

标签 python

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

[{'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/

相关文章:

python - Flask函数中获取JSON数据

python - Python3.3需要watcher

python - Django : Duplicate entry in uuid4

python - 继承中命名空间的顺序是什么?

python - 每 20 分钟编辑一次 python 文件中的特定单词

python - python 3.5 中的 dict.popitem()

python - 在 Mac/Python 上安装 basemap

Python:如何使用getattr获取对象的属性?

python - Python 中稀疏矩阵的矩阵乘法

python - Pytorch BiLSTM POS 标记问题 : RuntimeError: input. size(-1) 必须等于 input_size。预计6个,实测12个