我想使用lambda函数减少以下列表。我知道我可以首先遍历整个列表并根据条件值将其拆分为子列表。然后我会遍历子列表以获得最低价格。
price_list = [{'price':10.8,'condition':'new'},{'price':6.9,'condition':'new'},{'price':3.8,'condition':'used'},{'price':1.8,'condition':'used'}]
最终清单每个条件只包含一个项目,且价格最低。
final_list = [{'price':6.9,'condition':'new'},{'price':1.8,'condition':'used'}]
答案 0 :(得分:1)
我会这样做:
from collections import defaultdict
import sys
d = defaultdict(lambda: float('inf'))
for x in price_list:
d[x['condition']]=min(d[x['condition']],x['price'])
[{ 'price':v, 'condition':k } for k,v in d.items() ]
#output:
[{'price': 1.8, 'condition': 'used'}, {'price': 6.9, 'condition': 'new'}]
答案 1 :(得分:0)
你可以这样做:
li=[]
for c in {e['condition'] for e in price_list}:
di={}
di['price']=min(e['price'] for e in price_list if e['condition']==c)
di['condition']=c
li.append(di)
>>> li
[{'price': 6.9, 'condition': 'new'}, {'price': 1.8, 'condition': 'used'}]
正如ShadowRanger指出的那样,你可以在一次迭代中这样做:
dd=defaultdict(lambda: float('inf'))
for itemdict in price_list:
cond = itemdict['condition']
dd[cond] = min(dd[cond], itemdict['price'])
li=[]
for k, v in dd.items():
li.append({'price':v, 'condition':k})