2017-11-22 1 views
2

사전에있는 키 중 하나의 값이 조건을 충족시키는 경우 루프에서 빠져 나가서 속성을 True으로 설정하고 싶습니다.파이썬에서 사전에 while 루프를 사용할 수 있습니까?

내가 지금까지하고 있어요입니다 :

fooBar = False 
for key, value in my_dict.items(): 
    if (condition): 
     fooBar = True 

내가 사전에있는 모든 항목을 통해 루프를 사용하여 반복해야합니까, 아니면 while 루프를 사용할 수 있습니까?

+2

while 루프는 언제 종료해야하는지 어떻게 알 수 있습니까? 왜 for 루프에서 빠져 나오지 않는 거지? 부울 플래그가 있다면 왜 else 절을 ​​대신 사용하지 않을까요? –

+3

'fooBar = True'의 뒤에'break'를 사용하십시오. – NendoTaka

+1

확실히 while 루프를 사용할 수 있습니다. * 모든 for 루프는 while 루프로 작성할 수 있습니다. 당신의 for 루프에 비해 어떤 장점이 있습니다. –

답변

4

당신은 전체 사전을 통해 반복하는 계속 필요가 없습니다 - 당신은 break 루프 밖으로 수 :이 같은 선형 검색의 경우

fooBar = False 
for key, value in my_dict.items(): 
    if (condition): 
     fooBar = True 
     break # Here! 
2

, & 반복 AA 플래그 세트가 함께 파괴 고전적인 기술. 루프가 완전히 끝날 때를 예측할 수없는 경우에 대비하여 while을 예약하십시오.

그러나 깃발을 설정하는 것보다 훨씬 더 pythonic 한 방법은 for 루프에 else을 사용하는 것입니다 (자바 또는 C에서해야 할 것처럼). 그냥 내 2 센트

for key, value in my_dict.items(): 
    if condition: 
     break 
else: 
    # here we know that the loop went to the end without a break 

는하지만 : 사전에 반복하는 모든 항목을 처리하기 위해 쉬지 않고 수행해야합니다. 잠재적 인 break은 데이터가 잘 정리 된 경우 더 빠를 수있는 선형 검색이 있음을 의미합니다 (예를 들어 검색 대상에 따라 다른 사전에 키로 저장된 값을 사용하여 조회가 빨라짐)

2

Pythonic

>>> my_dict = {1: 4, 5: 6} 
>>> any(k + v > 10 for k, v in my_dict.items()) 
True 
>>> any(k + v > 100 for k, v in my_dict.items()) 
False 

menti로 : 당신이 10보다 큰 합 (key, value)의 쌍이 있는지 확인하려는 경우, 예를 들어

any(condition for k, v in my_dict.items()) 

: 변형 any를 사용하는 것 코드처럼 아주 많이 보이는 함수로 작성

def any(iterable): 
    for element in iterable: 
     if element: 
      return True 
    return False 

: 문서에에 +1, any은 동일합니다.

+0

좋은 지적. 복잡한 처리에는 적용되지 않습니다. –

+0

@ Jean-FrançoisFabre : 왜 안 되니? 'any (complex_processing (k, v) for k, v in my_dict.items()) ' –

+1

보조 변수가있는 코드, 누적 된 것들을 의미합니다 ... 전역 변수를 사용해야하므로 함수에서는별로 좋지 않습니다. 참고 : 나는 당신의 대답을 upvoted) –

관련 문제