如何解决为什么列表中的元素不是同一结构?
我有这个查询集
ranges = AgeRange.objects.all().order_by("id")
ranges_list = [{item.id,item.frm_to } for item in ranges]
我得到了这个结果:
[{1,'1-6'},{2,'1-18'},{3,'1-40'},{'40-60',4},{5,'60-100'}]
我无法弄清楚为什么第四项 {'40-60',4} 的元素是相反的。如何确保剩下的ID?
解决方法
set
对象是不同散列对象的 “无序” 集合。
元素 {2,'1-18'}
是 Python set
对象,它没有任何 订购
您可以通过 print(type({2,'1-18'}))
检查元素的类型,显然可以打印出set
。
为确保ID优先,请使用 元组 而不是 set
ranges_list = [(item.id,item.frm_to) for item in ranges]
,
花括号用于声明集合,而集合是无序的。巧合的是,它仅影响您的一项。
最简单的解决方法是使用括号而不是集合来创建元组,更好的解决方法是,如果确实只需要这两个字段,则首先使用values_list
查询:
ranges_list = [(item.id,item.frm_to) for item in ranges]
或:
ranges_list = AgeRange.objects.all().order_by("id").values_list("id","frm_to")
在最后一种情况下,您不需要ranges
查询。
它会返回一个可迭代的查询集结果,而不是列表-如果您确实确实需要一个列表,只需在其上调用list()
构造函数即可:
ranges_list = list(AgeRangeobjects.all().order_by("id").values_list("id","frm_to"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。