在我的 GAE 应用程序中,我想创建一个 JDOQL,它返回一个列表,其中每个元素最多存在一次,即使在数据库中还有更多。我怎样才能做到这一点?
问问题
268 次
1 回答
0
我不了解 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)
希望这会有所帮助,因为到目前为止它对我来说是最好的方法。
于 2010-12-10T10:44:22.910 回答