2011-01-06 3 views
2

나는이 하나 개의 클래스가이 개 변수 회원 :파이썬 검색 : 그것을 어떻게 효율적으로

class A: 
    fullname = "" 
    email = "" 

메모리에 저장, 지금은 전체 이름 또는 이메일, 검색 요구에 대해 검색 할 필요가의 목록이 있습니다 fuzzy search (SQL 'like 절을 모으기)를 지원하려면 예를 들어 "abc"를 검색해야합니다. "dabcd"에 일치해야합니다 (정확한 일치를 먼저 표시 할 수 있다면 먼저 좋을 것입니다).

'fullname'및 'email'에 색인을 작성해야한다고 생각하십니까?

감사합니다.

편집 : 일치 검색 만 필요한 경우 '전체 이름'과 '이메일'을 키로 사용하는 두 개의 사전이 최선의 선택입니까? 나는 몇몇 기사가 가져 오기가 O (1)다는 것을 밝힌다.

두 번째 편집 : 내가 정의한 '최고'는 검색 속도 (최고 속도)입니다. 파이썬에서는 참조가 포인터로만 사전에 저장되므로 공간 할당이 문제가되지 않아야합니다. 나는 수천의 기록을 가지고있다.

+0

몇 개의 항목을 예상합니까? – Tom

답변

2

정확하게 일치해야하는 경우 'fullname'및 'email'을 키로 사용하는 두 개의 사전이 최선의 선택입니까?

"최고"란 "최고 속도"를 의미하는 경우 '예'입니다.

일부 기사에서 페칭이 O (1)라고 나와 있습니다.

맞습니다.

두 개의 사전이 빠릅니다.


"좋아요"절의 동작을 원한다면 문제가되지 않습니다. 대부분의 구조는 똑같이 느립니다. 사전이 작동하고 합리적으로 빠를 것입니다. 그러나 목록은 거의 동일한 속도입니다.

def find_using_like(some_partial_key, dictionary): 
    for k in dictionary: 
     if some_partial_key in key: 
      return dictionary[k] 
+0

가 업데이트되었습니다. 확인하십시오. 퍼지 검색이 필요한 경우 제안 사항이 있습니까? –

+1

@Bin Chen : "퍼지 (fuzzy)"라고 생각하는 것을 적어주십시오. 나는 무엇이든 의미 할 수있다. 귀하의 예제는 본질적으로 키 문자열을 "포함"합니다. 그게 "퍼지"라는 뜻인가요? 포함되어 있습니까? –

+0

예, 그게 내가 모호한 말입니다. 나는 이것이 SQL 언어에서 'like'키워드라고 생각한다. –

3

sqlite3 모듈을 살펴보십시오. 데이터를 메모리 내장 데이터베이스에 저장하고 인덱싱하며 표준 SQL로 쿼리 할 수 ​​있습니다.

관련 문제