-3

这是一个后续问题。我知道如何删除列表中的最小值,remove(min())但不是字典。我正在尝试删除 Python 字典中的最低价格。

shops['foodmart'] = [12.33,5.55,1.22]
shops['gas_station'] = [0.89,45.22]
4

3 回答 3

4

具体来说,对于给出的示例:

shops['foodmart'].remove(min(shops["foodmart"]))

更一般地说,对于整个字典:

for shop in shops :
    shops[shop].remove(min(shops[shop]))

逻辑与从您提到的列表中删除值相同。shops[shop]在您的情况下,它本身也是一个列表。因此,您在列表中所做的也适用于此。

Lattyware 建议的一种更快、更清洁的方法是:

for prices in shops.values():
    prices.remove(min(prices))
于 2013-01-10T17:18:13.437 回答
2
>>> shops={}
>>> shops['foodmart'] = [12.33,5.55,1.22]
>>> shops['gas_station'] = [0.89,45.22]
>>> shops
{'foodmart': [12.33, 5.55, 1.22], 'gas_station': [0.89, 45.22]}

>>> for x in shops:             #iterate over key
    shops[x].remove(min(shops[x])) # min returns the smallest value and 
                                   # that is passed to remove

>>> shops
{'foodmart': [12.33, 5.55], 'gas_station': [45.22]}

或者:

>>> for values in shops.values():    #iterate over values
...     values.remove(min(values))
...     
>>> shops
{'foodmart': [12.33, 5.55], 'gas_station': [45.22]}
于 2013-01-10T17:18:26.733 回答
1

如果最低价格是唯一的,则上述所有解决方案都可以工作,但如果列表中有多个最小值需要删除,则可以使用以下构造

{k : [e for e in v if e != min(v)] for k, v in shops.items()}

这里要特别注意的是,使用 list.remove 实际上会从列表中删除与针匹配的第一项(也就是最小值),但是要一次性删除所有分钟,您必须重建列表过滤所有符合最小值的项目。注意,这会比使用 list.remove 慢,但最后你必须决定你的要求是什么

不幸的是,尽管上面的结构很简洁,但它最终要求min每个商店的每个价格元素。您可能不想将其转换为循环结构以减少开销

>>> for shop, price in shops.items():
    min_price = min(price)
    while min_price in price:
        shops[shop].remove(min_price)


>>> shops
{'foodmart': [12.33], 'toy_store': [15.32], 'gas_station': [45.22], 'nike': [69.99]}
>>> 
于 2013-01-10T17:34:13.057 回答