问题描述
这是我的Django代码不能按预期工作:
Here is my Django code that does not work as expected:
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!
有没有办法保留原始元素的顺序,所以帖子将按添加
在 posts_to_return
?
Is there a way to keep the original element order, so the posts would be ordered by added
in posts_to_return
?
谢谢!
编辑: Python 2.6,Django 1.3
Python 2.6, Django 1.3
推荐答案
使用SortedDict而不是dict( from django.utils.datastructures import SortedDict
)
Use SortedDict instead of dict (from django.utils.datastructures import SortedDict
)
SortedDict维护它的顺序是 keyOrder
属性。所以你可以操纵排序,而不需要重建dict,如果你想的话。例如,要反转SortedDict的顺序,只需使用 keyOrder.reverse()
SortedDict maintains it's order in it's keyOrder
attribute. So you can manipulate the ordering without reconstructing dict if you want to. For example, to reverse the SortedDict's order just use keyOrder.reverse()
post_list = SortedDict([(obj.id, obj) for obj in posts])
# reversing the post order in-place
post_list.keyOrder.reverse()
这篇关于Python:字典中的元素顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!