Python 如何对StringListProperty()查询对象进行排序?

Python 如何对StringListProperty()查询对象进行排序?,python,google-app-engine,sorting,Python,Google App Engine,Sorting,我有这个模型: class ArticleTagList(db.Model): article_tags = db.StringListProperty() 在EditArticleHandler中,我执行以下操作: tag_query = ArticleTagList.all() for tag in tag_query: for i in range(len(tag.article_tags)):

我有这个模型:

class ArticleTagList(db.Model):
    article_tags = db.StringListProperty()
EditArticleHandler
中,我执行以下操作:

        tag_query = ArticleTagList.all()

        for tag in tag_query:
            for i in range(len(tag.article_tags)):

                self.response.out.write(""" <span id="small-tags">
                <input type="checkbox" name="article_tag" value="%s">%s  </span>"""
                 % (tag.article_tags[i], tag.article_tags[i]))
给予

AttributeError: 'Query' object has no attribute 'sort'
如何对查询的列表进行排序?谢谢

更新

谢谢你的回答。我很难理解查询结果,因此不确定我是否理解下面的评论;但这就是我解决问题的方式,我希望大家能评论一下为什么这是一个好的解决方案,或者为什么这不是一个好的解决方案。(例如,使用
range()
进行迭代是否仍然是错误的?)

query=ArticleTagList.all()
items=query.get()
items.article_tags.sort()
对于范围内的i(len(items.article_标记)):
self.response.out.write(“”)
%s“”
%(items.article_标签[i],items.article_标签[i]))

请不要通过对范围内的i(len(tag.article\u tags))执行
来遍历列表。
。没有理由<代码>用于标记中的标记。article_标记工作得更好,更具Python风格

要回答您的问题,请不要忘记这里有两个类似列表的东西:一组
article标签列表
实例,以及每个实例中的
article\u标签列表
。您是否尝试对所有标记进行排序,无论它们位于哪个标记列表中?在这种情况下,您需要将它们全部合并到一个大列表中:

full_list = []
for tag in tag_query:
    full_list.extend(list(tag.article_tags))

full_list.sort() 

请不要通过对范围内的i(len(tag.article\u tags))执行
来遍历列表。
。没有理由<代码>用于标记中的标记。article_标记工作得更好,更具Python风格

要回答您的问题,请不要忘记这里有两个类似列表的东西:一组
article标签列表
实例,以及每个实例中的
article\u标签列表
。您是否尝试对所有标记进行排序,无论它们位于哪个标记列表中?在这种情况下,您需要将它们全部合并到一个大列表中:

full_list = []
for tag in tag_query:
    full_list.extend(list(tag.article_tags))

full_list.sort() 
您可能想要:

    for article_tag_list in tag_query:
        article_tags = sorted(article_tag_list.article_tags)
        for tag in article_tags:
            self.response.out.write("""<span id="small-tags">
            <input type="checkbox" name="article_tag" value="%s">%s  </span>"""
             % (tag, tag))
标签查询中的物品标签列表的
:
article\u tags=已排序(article\u tag\u列表。article\u tags)
对于文章中的标签_标签:
self.response.out.write(“”)
%s“”
%(标签,标签)
您可能需要:

    for article_tag_list in tag_query:
        article_tags = sorted(article_tag_list.article_tags)
        for tag in article_tags:
            self.response.out.write("""<span id="small-tags">
            <input type="checkbox" name="article_tag" value="%s">%s  </span>"""
             % (tag, tag))
标签查询中的物品标签列表的
:
article\u tags=已排序(article\u tag\u列表。article\u tags)
对于文章中的标签_标签:
self.response.out.write(“”)
%s“”
%(标签,标签)

听起来好像您正试图按顺序打印标记,但实际上您正在尝试对实例进行排序。你应该这样做:

for taglist in tag_query:
  for tag in sorted(taglist.article_tags):
    #...

但是,考虑到您可能总是希望它们按排序顺序存储,因此在创建实体时以及存储实体之前,在实体上调用
taglist.article\u tags.sort()
,以确保标记按排序顺序存储会更容易些。

听起来像是在尝试按顺序打印标记,但您正在尝试对实例进行排序,相反你应该这样做:

for taglist in tag_query:
  for tag in sorted(taglist.article_tags):
    #...

但是,考虑到您可能总是希望它们按排序顺序存储,因此在创建实体时以及存储实体之前,在实体上调用
taglist.article\u tags.sort()
,以确保标记按排序顺序存储会更容易些。

tag\u query
返回
ArticleTagList
实例,不是标签列表。@Nick Johnson:我仍然对查询返回的内容感到困惑。我得到的是“查询对象没有排序方法”之类的东西。思考查询结果的好方法是什么?由于这是一个
StringListProperty
,因此返回的不是列表这一点令人困惑。谢谢。@Zeynel查询对象是对象。如果您使用for循环对它们进行迭代,它们将返回实体—在本例中是,
ArticleTagList
实例。如果对它们调用
.fetch(num)
(效率更高),它们将返回一个实体列表。
tag\u query
返回
ArticleTagList
实例,而不是标记列表。@Nick Johnson:我仍然不清楚查询返回的是什么。我得到的是“查询对象没有排序方法”之类的东西。思考查询结果的好方法是什么?由于这是一个
StringListProperty
,因此返回的不是列表这一点令人困惑。谢谢。@Zeynel查询对象是对象。如果您使用for循环对它们进行迭代,它们将返回实体—在本例中是,
ArticleTagList
实例。如果对它们调用
.fetch(num)
(效率更高),它们将返回一个实体列表。“ArticleTagList实例集,以及每个实例中的article_标记列表。”我不明白这意味着什么,也不明白我的哪些变量引用了哪个。我希望能对此作出更多解释。谢谢。“ArticleTagList实例集,以及每个实例中的article_标记列表。”我不明白这意味着什么,或者我的哪些变量引用了哪些。我希望能对此作出更多解释。谢谢。不幸的是,我不明白我做错了什么。在模型
ArticleTagList
中,我有属性
article\u tags
,它是一个列表。我想在显示之前查询此列表并对其排序。我该怎么做?我明白,正如你所说,最好将列表保存为排序列表。如何将其保存为排序列表?谢谢。@Zeynel:要按顺序显示,请使用我答案中的第一个代码段。要在存储之前对其进行排序,请在第一次创建实体时以及在对其调用
.put()
之前使用第二个代码段。不幸的是,我不明白我做错了什么。在模型
ArticleTagList
中,我有属性
article\u tags
,它是一个列表。我想在显示之前查询此列表并对其排序。我该怎么做?我明白,正如你所说,最好将列表保存为排序列表。如何将其保存为排序列表?谢谢。@Zeynel:要按顺序显示,请使用我答案中的第一个代码段。如此