根据条件和价格减少一系列字典

时间:2016-08-08 22:17:48

标签: python list dictionary lambda python-3.4

我想使用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'}]

2 个答案:

答案 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})