我有一个像这样的词典列表。
somelist = [
{ "store" : Amazon, "price": 1000},
{ "store" : Junglee, "price": 1200},
{ "store" : BestBuy, "price": 1300},
{ "store" : Amazon, "price": 900},
{ "store" : BestBuy, "price": 1200}
]
我想过滤它,以便我只获得那些具有独特商店且价格最低的字典。所以最终的结果应该是
[
{ "store" : Amazon, "price": 900},
{ "store" : Junglee, "price": 1200},
{ "store" : BestBuy, "price": 1200}
]
在python中执行此操作的最佳方法是什么?
答案 0 :(得分:2)
您可以将词典收集到OrderedDict
,其中key是商店,价值是最低价格。然后,您可以使用列表理解轻松地重建字典:
from collections import OrderedDict
d = OrderedDict()
for x in somelist:
d[x['store']] = min(d.get(x['store'], float('inf')), x['price'])
[{'store': k, 'price': v} for k, v in d.items()] # [{'price': 900, 'store': 'Amazon'}, {'price': 1200, 'store': 'Junglee'}, {'price': 1200, 'store': 'BestBuy'}]
如果不需要保留商店的订购,您也可以使用标准dict
。
答案 1 :(得分:0)
如果store
值的字符串如下:
somelist =
[
{ "store" : 'Amazon', "price": 1000},
{ "store" : 'Junglee', "price": 1200},
{ "store" : 'BestBuy', "price": 1300},
{ "store" : 'Amazon', "price": 900},
{ "store" : 'BestBuy', "price": 1200}
]
您可以这样做:
unique = set(map(lambda x: x['store'], somelist))
result = [min([__ for __ in somelist if __['store'] == _]) for _ in unique]
结果
[
{'price': 900, 'store': 'Amazon'},
{'price': 1200, 'store': 'Junglee'},
{'price': 1200, 'store': 'BestBuy'}
]