Python:字典中的元素顺序 [英] Python: Element order in dictionary

查看:642
本文介绍了Python:字典中的元素顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的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:字典中的元素顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆