문제

Google App Engine Datastore에 엔터티가있어 익명 사용자를위한 링크를 저장한다고 상상해보십시오. 지원되지 않는 다음 SQL 쿼리를 수행하려고합니다.

SELECT DISTINCT user_hash FROM links

대신 사용할 수 있습니다.

user = db.GqlQuery("SELECT user_hash FROM links")

파이썬 사용 방법 가장 효율적입니다 결과를 필터링하려면 고유 한 결과 세트를 반환합니까? 고유 한 결과 세트를 계산하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

세트는 다음을 처리하는 좋은 방법입니다.

>>> a = ['google.com', 'livejournal.com', 'livejournal.com', 'google.com', 'stackoverflow.com']
>>> b = set(a)
>>> b
set(['livejournal.com', 'google.com', 'stackoverflow.com'])
>>> 

첫 번째 답변과 함께 한 가지 제안은 세트와 딕트가 고유 한 결과를 빠르게 검색하는 데 더 나은 것이 아니라 목록의 멤버십이 O (N) 대 O (1)이므로 추가 데이터를 저장하려는 경우 추가 데이터를 저장하려는 경우입니다. , 또는 언급 된 것을 만드는 것과 같은 일을하십시오 unique_results 목록, 다음과 같은 작업을 수행하는 것이 좋습니다.

unique_results = {}
>>> for item in a:
    unique_results[item] = ''


>>> unique_results
{'livejournal.com': '', 'google.com': '', 'stackoverflow.com': ''}

다른 팁

완료를 위해이 질문을 되 살리기 :

별개의 키워드가 소개되었습니다 릴리스 1.7.4.

업데이트 된 GQL 참조 (예 : Python의 경우)를 찾을 수 있습니다. 여기.

한 가지 옵션은 결과를 설정된 개체에 넣는 것입니다.

http://www.python.org/doc/2.6/library/sets.html#sets.set

결과 세트는 전달 된 뚜렷한 값으로 만 구성됩니다.

실패하면 고유 한 객체 만 포함 된 새로운 목록을 구축하면 작동합니다. 같은 것 :

unique_results = []
for obj in user:
    if obj not in unique_results:
        unique_results.append(obj)

저것 for 루프는 목록 이해력에도 응축 될 수 있습니다.

이 질문을 파헤쳐 미안하지만 GAE에서는 그런 물건을 비교할 수 없습니다. 비교를 위해 .key ()를 사용해야합니다.

이것은 매우 비효율적입니다.

def unique_result(array):
    urk={} #unique results with key
    for c in array:
        if c.key() not in urwk:
            urk[str(c.key())]=c
    return urk.values()

누군가가 더 나은 솔루션을 가지고 있다면 공유하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top