列表中的数据处理,Python中有重复项

我有两个清单:一个包含产品,另一个包含它们的相关价格。列表中可以包含未定义数量的产品。列表的示例如下:

  • 产品:['Apple','Apple','Apple','Orange','Banana','Banana','Peach','Pineapple','Pineapple']

  • 价格:['1.00','2.00','1.50','3.00','0.50','1.50','2.00','1.00','1.00']

我希望能够从产品列表中删除所有重复项,并仅将与唯一产品相关联的最便宜的价格保留在价格列表中。请注意,某些产品的价格可能相同(在我们的示例中为菠萝)。

所需的最终列表如下所示:

  • 产品:['Apple','Orange','Banana','Peach','Pineapple']

  • 价格:['1.00','3.00','0.50','2.00','1.00']

我想知道在Python中最有效的方法。谢谢


暮色呼如
浏览 203回答 3
3回答

翻过高山走不出你

from collections import OrderedDictproducts = ['Apple', 'Apple', 'Apple', 'Orange', 'Banana', 'Banana', 'Peach', 'Pineapple', 'Pineapple']prices = ['1.00', '2.00', '1.50', '3.00', '0.50', '1.50', '2.00', '1.00', '1.00']min_prices = OrderedDict()for prod, price in zip(products, prices):    min_prices[prod] = min(float(price), min_prices.get(prod, float('inf')))>>> print min_prices.keys(), min_prices.values()['Apple', 'Orange', 'Banana', 'Peach', 'Pineapple'] [1.0, 3.0, 0.5, 2.0, 1.0]

函数式编程

那这个呢:prices = map(float,prices)r={}for k,v in zip(products,prices):&nbsp; &nbsp; if v < r.setdefault(k,float('inf')):&nbsp; &nbsp; &nbsp; &nbsp; r[k] = vproducts,prices = r.keys(),map(str,r.values())

翻翻过去那场雪

可能最简单的方法是利用字典对唯一键的强制执行:from operator import itemgetterProducts = ['Apple', 'Apple', 'Apple', 'Orange', 'Banana', 'Banana', 'Peach', 'Pineapple', 'Pineapple']Prices = ['1.00', '2.00', '1.50', '3.00', '0.50', '1.50', '2.00', '1.00', '1.00']final = dict(sorted(zip(Products, Prices), key=itemgetter(1), reverse=True))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python