这是一个后续问题。我知道如何删除列表中的最小值,remove(min())
但不是字典。我正在尝试删除 Python 字典中的最低价格。
shops['foodmart'] = [12.33,5.55,1.22]
shops['gas_station'] = [0.89,45.22]
这是一个后续问题。我知道如何删除列表中的最小值,remove(min())
但不是字典。我正在尝试删除 Python 字典中的最低价格。
shops['foodmart'] = [12.33,5.55,1.22]
shops['gas_station'] = [0.89,45.22]
具体来说,对于给出的示例:
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))
>>> 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]}
如果最低价格是唯一的,则上述所有解决方案都可以工作,但如果列表中有多个最小值需要删除,则可以使用以下构造
{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]}
>>>