【发布时间】:2010-12-09 17:48:58
【问题描述】:
在我的 GAE 应用程序中,我想创建一个 JDOQL,它返回一个列表,其中每个元素最多存在一次,即使在数据库中还有更多元素。我该怎么做?
【问题讨论】:
标签: google-app-engine google-cloud-datastore set jdoql
在我的 GAE 应用程序中,我想创建一个 JDOQL,它返回一个列表,其中每个元素最多存在一次,即使在数据库中还有更多元素。我该怎么做?
【问题讨论】:
标签: google-app-engine google-cloud-datastore set jdoql
我不了解 JDOQL,但如果您想要一个列表,其中每个实体最多存在一次,即每个列表元素都是唯一的,那么您可以执行以下操作:
假设你有一个实体类型/模型类,我们称之为 Type,属性为 att1,attr2。 您希望拥有一个基于一个或多个属性的唯一元素列表,例如 attr2。
您可以使用我从一个很好的来源改编而来的以下方法:
def 唯一(seq,idfun=None): ''' 一个以非常有效的方式返回唯一项目列表的函数 参考:http://www.peterbe.com/plog/uniqifiers-benchmark ''' # 顺序保留 如果 idfun 为无: def idfun(x): 返回 x 见过={} 结果 = [] 对于序列中的项目: 标记= idfun(项目) # 在旧的 Python 版本中: # if seen.has_key(marker) # 但在新的: 如果看到标记:继续 看到[标记] = 1 结果.追加(项目) 返回结果要从基于 attr2 的数据存储类型类型中获取唯一元素列表,我可以执行以下操作:
列表 = Type.all() unique_list = unique(list,lambda t: t.attr2)希望这会有所帮助,因为它是迄今为止对我来说最好的方法。
【讨论】: