python有序字典之OrderedDict()(用来解决django模糊查询中不按照所给数据顺序查询解决办法)

from collections import OrderedDict

在python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的是,
collections模块为我们提供了OrderdDict,当你要获取一个有序的字典对象时,用它。

举例:

from collections import Counter, OrderedDict
b = OrderedDict()
for i in range(5):
    user = b.setdefault(i,[])
    print(user)
    user.append(i)
    print(user)


print(b)

# 输出如下
[]
[0]
[]
[1]
[]
[2]
[]
[3]
[]
[4]
OrderedDict([(0, [0]), (1, [1]), (2, [2]), (3, [3]), (4, [4])])

比如说有一个course_ids ,他是一个按照某种规律的id列表,但是还需要使用它来查询一个查询集,当时用pk__in,时,获取到的查询集,将会破坏查询集的顺序,这时就可以使用到OrderedDict,解决排序的问题

        course = Content.objects.filter(section_id=pk).order_by('-weight')
        course_ids = [i.course_id for i in course]
        # 通过查询后,破换了排序
        course_lists = VideoInfo.objects.filter(pk__in=course_ids)

        # 通过有序字典,将结果重新排序
        weight_list = []
        base_course = OrderedDict()
        for video in course_lists:
            course = base_course.setdefault(video.id, [])
            course.append(video)
        for course_id in course_ids:
            course = base_course.get(course_id, '')[0]
            if course:
                weight_list.append(course)
        # 此时的course_list 就是按照排序得到的查询集
        course_list = weight_list
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值