2013-08-20 1 views

답변

1

한 가지 방법은 return의 존재에 의해 수행 한 것처럼 보이는 (함수 내부의 코드를 삽입하는 것입니다 :

def get_passkey(admin_extra, name): 
    for admin in admin_extra: 
     if admin['name'] == name: 
      passkey = admin[passkey] 
     return passkey 
    # this will not happen if we have left the function due to returning the passkey 
    return None  # We did not find a passkey 

또 다른 방법은 break 문을 사용하는 것입니다.

name = 'nikhil' 
passkey = '' 

for admin in admin_extra: 
    if admin['name'] == name: 
     passkey = admin[passkey] 
     print passkey 
     break 
else: 
    print "not found" 

기타 (부분적으로 뺨을 때리는 소리) 제안 : classes을 사용하십시오.

예제 코드 :이 그것을 달성하지 않습니다

admins = AdminList(Admin("Nikhil", "nikhilpasskey"), Admin("Mac", "macpasskey")) 
pass = admins["Nikhil"].passkey 
+0

두 번째 예는 잘못되었습니다. else 블록은 완전히 잘못 배치됩니다. 암호 키가 여전히''''인지 확인하고 싶었던 것 같습니다. –

+0

아니요, 파이썬의'else' 문은'for' 루프에서 작동합니다! 블록의 코드는 if라고 부르며 루프 *가 분리되지 않은 경우에만 호출됩니다. – rlms

+0

놀라운 ... 그것을 몰랐다. 감사. –

-1

을 제거 할 또한

name = 'nikhil' 

flag = 0 

for admin in admin_extra: 
    if admin['name'] == name: 
     passkey = admin[passkey] 
     flag = 1 
     return passkey 

if not flag: 
    print "not found" 

으로 수행 한 :

ae_names = [ae['name'] for ae in admin_extra] 

if name not in ae_names: 
    print "not found" 
+0

영업 이익, 암호 키를하고 싶어. – rlms

+0

:) 감사합니다 Ludo. user2387370 또한 패스 키를 얻고 싶습니다 –

+0

죄송합니다. (BTW : 루프에 return 문을 넣는 것에 대한 충고) @ThorstenKranz 솔루션으로 가십시오. – Ludo

1

가장 확실한 방법은 break를 사용하는 것 성명서.

passkey = None 

for admin in admin_extra: 
    if admin['name'] == name: 
     passkey = admin["passkey"] 
     break 

if passkey is None: 
    print "not found" 

또는 지능형리스트를 사용

matching_admin_extras = [ae for ae in admin_extra if ae["name"] == name] 

if len(matching_admin_extras)==0: 
    print "not found" 
elif len(matching_admin_extras)>1: 
    print "multiple matches" 
else: 
    print matching_admin_extras[0]["passkey"] 
1
name = 'nikhil' 

try: 
    passkey = [admin['passkey'] for admin in admin_extra if admin['name'] == name][0] 
except IndexError: 
    print "No passkey found for", name 
0
filtered=[item['passkey'] for item in admin_extra if item['name'] == name] 
return filtered[0] if filtered else 'not found' 
관련 문제