这是我的Django代码不能按预期工作:
posts = Post.objects.all().order_by('-added')[:20] # ordered by 'added'
post_list = dict([(obj.id, obj) for obj in posts])
# ... some operations with dictionary elements go here ...
posts_to_return = [post for post_id, post in post_list.items()] # order by 'id' now!
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,以保持原有的元素顺序,这样的职位将被责令added在posts_to_return?
谢谢!
编辑: Python 2.6,Django 1.3
python(和大多数语言)中的Dicts没有顺序.你应该改用collections.OrderedDict.这将保留添加项目的顺序.sorted()如果添加顺序不是您要保留的顺序,也可以查看内置函数.
使用SortedDict而不是dict(from django.utils.datastructures import SortedDict)
SortedDict在其keyOrder属性中维护它的顺序.因此,如果您愿意,可以在不重建字典的情况下操纵排序.例如,要反转SortedDict的顺序,只需使用keyOrder.reverse()
post_list = SortedDict([(obj.id, obj) for obj in posts])
# reversing the post order in-place
post_list.keyOrder.reverse()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |