이것은 파이썬에서 오브젝트를 검색 한 방법입니다. 더 효율적인 (더 빠르고 간단한) 방법이 있습니까?오브젝트 검색
Obs : A는 알려진 개체입니다.
for i in Very_Long_List_Of_Names:
if A == My_Dictionary[i]:
print: "The object you are looking for is ", i
break
이것은 파이썬에서 오브젝트를 검색 한 방법입니다. 더 효율적인 (더 빠르고 간단한) 방법이 있습니까?오브젝트 검색
Obs : A는 알려진 개체입니다.
for i in Very_Long_List_Of_Names:
if A == My_Dictionary[i]:
print: "The object you are looking for is ", i
break
한 라이너는 다음과 같습니다 (i for i in List_of_names if A == My_dictionary[i]).next()
. My_dictionary
의 키와 항목이 발견되지 않는 경우 StopIteration
하지 List_of_names
의 항목이있는 경우에 이것은 KeyError
을 던졌습니다
, 다른, 그것은 당신의 코드는 항상 중단됩니다 A.
나는이 생성기 + 다음을 좋아하지만 내 응용 프로그램에서는 먼저()를 빌드하는 것을 선호하므로 더 의미가있다 : 먼저 (List_of_names if i == My_dictionary [i]) – tokland
당신이 파이썬 사전의 값으로 개체를 찾고 있다고 가정합니다.
단순히, 당신이 할 수있는 (에서와 같이, 당신이 정말로 것을 값으로 키지도 알고 걱정하지 않는다)의 존재를 확인하려는 경우 :
if A in My_Dictionary.values():
print "The object is in the dictionary"
을 그렇지 않으면, 당신이 원하는 경우
for k, v in My_Dictionary.iteritems():
if v == A:
print "The object you are looking for is ", k
break
편집 : 같은 사전에 같은 값으로 여러 키를 가질 수 참고 값과 연관된 키를 얻을 수 있습니다. 위의 코드는 첫 번째 발생 항목 만 찾습니다. 그래도 엄청난 이름 목록을 가지고있는 것이 확실합니다. :-)
특정 값을 찾는 모든 키를 검색하는 경우 사전을 잘못 사용하고있는 것처럼 보입니다.
A
이 해시 가능이면 A를 값이 i
인 사전에 저장하십시오.
d = {A: 'a_name'}
My_Dictionary
거대한하지 않고 메모리에 수 사소 적합하고, A
이 해쉬이면, 그것에서 중복 사전을 만들 :
d = dict((value, key) for key, value in My_Dictionary.iteritems())
if A in d:
print "word you're looking for is: ", d[A]
을 그렇지 않으면, 당신은 반복해야합니다 모든 키를 통해 :
for word, object_ in My_Dictionary.iteritems():
if object_ == A:
print "word you're looking for is: ", word
"역순"키와 새 사전의 값은 중복 값이 서로 겹쳐 쓰임을 의미합니다. 그러나 원래의 게시물에는 처음에 가치가있는 값 중 어느 것을 알지 못하는 문제가 있습니다. –
당신 말이 맞습니다. 그러나 제 변호에서, relima가 자신의 for 루프를 쓰는 방법을 가정하면 그럴 것이라고 생각했습니다. –
발견 키를 반환 그래서 그것은 긴 목록을 통해 반복하지 않습니다. 아마 당신은 "틈"을 한 단계 더 들여 쓰기를 의미할까요? –
PEP8 : Very_Long_List_Of_Names, My_Dictionary. 응. – tokland
역 사전 (값 -> 키)이 필요합니다. 빌드하기에 적합합니까? – tokland