2013-01-10 6 views
-3

이것은 다음 질문입니다. remove(min())으로 목록에서 최소를 제거하는 방법을 알고 있지만 사전은 제거하지 못합니다. 나는 Python 사전에서 가장 낮은 가격을 제거하려고 노력하고있다.파이썬 최저 가격 사전

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

목록의 최저 가격이 두 번 같으면 어떻게 될까요? '[1.0, 1.0, 2.0, 5.0]'? 둘 다 제거해야합니까 아니면 둘 중 하나만 제거해야합니까? – DSM

답변

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)) 
+0

키를 반복하면서이 값이 약간 이상합니다.하지만 원하는 값입니다. ''prices.remues (min (prices))''는''stores.values ​​() :''가격이 더 짧아지고, 더 명확 해지고 빠를 것이다. –

+0

@Lattyware 네, 당신은 틀림 없습니다. 감사. 나는 이미 그 때까지 또 다른 대답을했기 때문에 나는 그것을 언급하지 않았다. – asheeshr

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]} 
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]} 
>>>