从词典列表中筛选出来,对于每个项目,它是最低值

时间:2016-12-18 23:04:06

标签: python dictionary list-comprehension

如果对如何改进标题有任何想法的人感到非常欢迎!

我有一个词典列表:

list = [  
    { 'id' : 1,    'value' : 1 },
    { 'id' : 2,    'value' : 2 },
    { 'id' : 1,    'value' : 2 },
    { 'id  : 2,    'value' : 1 },
]

我已按key=itemgetter('id','value')对其进行排序并获取

list = [  
    { 'id' : 1,    'value' : 1 },
    { 'id' : 1,    'value' : 2 },
    { 'id' : 2,    'value' : 1 },
    { 'id  : 2,    'value' : 2 },
]

现在我想过滤掉每个ID,它是获得

的最低值
list = [  
    { 'id' : 1,    'value' : 1 },
    { 'id' : 2,    'value' : 1 },
 ]

我目前的解决方案是这样的

new_list = []
old_id = -1
for item in list:
    new_id = item['id']
    if new_id != old_id: 
        new_list.append(item)
        old_id = new_id

但我已经看到很多很酷的事情在这里完成了filter,map,reduce,lambda函数和列表理解,并开始质疑是否可以更清晰地解决我的问题?

1 个答案:

答案 0 :(得分:3)

由于列表已按idvalue排序,因此您可以按id进行分组,并从每个组中获取第一项,该项应该具有 ID :

from itertools import groupby
[next(g) for _, g in groupby(lst, key = lambda d: d['id'])]
# [{'id': 1, 'value': 1}, {'id': 2, 'value': 1}]