如果对如何改进标题有任何想法的人感到非常欢迎!
我有一个词典列表:
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函数和列表理解,并开始质疑是否可以更清晰地解决我的问题?
答案 0 :(得分:3)
由于列表已按id
和value
排序,因此您可以按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}]