4

我需要按多个字段对目录结果进行排序。

就我而言,首先按年排序,然后按月排序。年和月字段包含在我的自定义内容类型(item_publication_yearitem_publication_month分别)中。

但是,我没有得到我想要的结果。年份和月份根本没有排序。它们应该按降序出现,即 2006、2005、2004 等。

下面是我的代码:

def queryItemRepository(self):
    """
    Perform a search returning items matching the criteria
    """

    query = {}

    portal_catalog = getToolByName(self, 'portal_catalog')
    folder_path = '/'.join( self.context.getPhysicalPath() )

    query['portal_type'] = "MyContentType"
    query['path'] = {'query' : folder_path, 'depth' : 2 }

    results = portal_catalog.searchResults(query)

    # convert the results to a python list so we can use the sort function
    results = list(results)  

    results.sort(lambda x, y : cmp((y['item_publication_year'], y['item_publication_year']), 
                                   (x['item_publication_month'], x['item_publication_month'])
                                  ))


    return results

有人愿意帮忙吗?

4

2 回答 2

7

更好的选择是使用key参数进行排序:

results.sort(key=lambda b: (b.item_publication_year, b.item_publication_month))

您也可以使用sorted()内置函数而不是使用list(); 它会为您返回一个排序列表,Python首先调用结果然后排序的工作量相同list,因为它只是调用sorted

results = portal_catalog.searchResults(query)
results = sorted(results, key=lambda b: (b.item_publication_year, b.item_publication_month))

自然,item_publication_year和都item_publication_month需要出现在目录元数据中。

于 2012-09-19T13:35:26.617 回答
3

您可以使用高级查询直接从目录搜索中获得多个排序,另请参阅其官方文档

于 2012-09-19T14:04:37.233 回答