想象一下,您在Google App Engine数据存储区中有一个实体,为匿名用户存储链接。 您希望执行以下不支持的SQL查询:

SELECT DISTINCT user_hash FROM links

相反,您可以使用:

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

如何使用Python 最有效来过滤结果,以便返回DISTINCT结果集? 如何计算DISTINCT结果集?

有帮助吗?

解决方案

一套是解决这个问题的好方法:

>>> 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中引入了DISTINCT关键字

您可以找到更新的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)

循环的也可以压缩成列表理解。

很抱歉把这个问题弄清楚,但是在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