これはフォローアップの質問です。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]}
>>>