2012-05-07 3 views
1

users = {}으로 정의 된 사전이 있고 해당 사전에 데이터가 일부 있다고 할 때 사전을 검색하는 방법과 검색 문자열이 사전에있는 문자열과 일치하는 경우 아무 작업도 수행하지 않습니다.Python - 사전을 검색하여 특정 문자열을 찾는 방법은 무엇입니까?

for socket.user in MyServer.users: 
    if ((MyServer.users.has_key(socket.user)) == false): 
     MyServer.users[user].send(socket.message) 

그래서 여기는 사용자 사전을 검색하여 존재한다는 것을 알기 때문에 아무 것도 수행하지 않아야합니다. 내 코드가 잘못되었다는 것을 알고 있지만 두 번째 줄에서 무엇을 바꿀 수 있습니까?

답변

1

파이썬에서는 pass 키워드를 사용하여 본질적으로 '아무 것도하지 않음'을 사용할 수 있습니다.

for socket.user in MyServer.users: 
    if MyServer.users.has_key(socket.user) == False: 
     pass 

그러나 더 적절한 방법은 원하는대로 코드를 작성하는 것입니다. 네가 필요로하지 않는 일을하지 말라.

for socket.user in MyServer.users: 
    if MyServer.users.has_key(socket.user) == True: 
     MyServer.users[user].send(socket.message) 
+2

의'for' /' if '조합이 낭비적이고 단순한'in' (또는'not in') 테스트가 훨씬 더 빠를 것입니다. –

+0

@ DanielPryden 당신은 정확합니다; 'in/not in'은 질문자가 묘사 한 방법보다 빠릅니다. – PenguinCoder

3

어떻게 사전을 통해 검색하고 내 검색 문자열 내 사전에 문자열을 일치하는 경우 아무 것도 할 수 없었다.

if socket.user in MyServer.users: # search if key is in dictionary 
    pass # do nothing 
+0

음 ... 사용자가'for' /'in' 루프에 나타나면'not in' 테스트가 false가 아닌가? –

+0

@Daniel 그렇습니다. 단 하나의 'pass'명령으로도 불필요한'else' 문은 – log0

0

내가 당신을 위해 무엇을 찾고있는 뭔가를 누락하거나에게 있습니다 건가요 : MyServer.users` 정상적인 파이썬 사전 인`가정

if socket.user in MyServer.users: 
    # Send a message if it's a valid user 
    MyServer.users[user].send(socket.message) 
else: 
    # Do nothing if it isn't 
    pass 
+0

입니다. – PenguinCoder

+0

@ PenguinCoder : 실제로. 나는 OP에만 흐름을 명확하게하기 위해 추가했습니다. –

4
users = {"A": 0, "B": 1, "C": 2} 

key = "B" 
value = "2" 

if key in users: print("users contains key", key) 
if value in users.values(): print("users contains value", value) 
+1

'if key in users.keys()'대신'if key in users'를 사용할 수 있습니다. 이는 같은 의미입니다. –

+1

'{}'는 집합을 정의하지 않으며 항상 사전입니다. (심지어 파이썬 3에서도 set 리터럴에'{...} '을 사용할 수 있습니다.) – kindall

+0

아, 그래, 혼란 스럽네, 미안. – atomAltera

관련 문제