Python : GQuery 결과 세트의 구별 (GQL, GAE)
-
04-07-2019 - |
문제
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': ''}
다른 팁
한 가지 옵션은 결과를 설정된 개체에 넣는 것입니다.
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()
누군가가 더 나은 솔루션을 가지고 있다면 공유하십시오.
제휴하지 않습니다 StackOverflow