为什么列表的元素不在同一个结构中?
why the elements of the list is not in the same structure?
我有这个查询集
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'}]
我不明白为什么第 4 项的元素 {'40-60', 4} 是颠倒的。如何保证id在左边?
A set
object is an "unordered" collection of distinct hashable objects.
元素 {2, '1-18'}
是 Python set
对象,它没有任何 order
您可以通过 print(type({2, '1-18'}))
来检查元素的类型,这显然会打印 set
。
为了确保 id 成为第一个,使用 tuple 而不是 set
ranges_list = [<b>(item.id, item.frm_to)</b> 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
查询。
它将 return 一个可迭代的查询集结果而不是一个列表 - 如果你真的需要一个列表,只需调用 list()
构造函数即可:
ranges_list = list(AgeRangeobjects.all().order_by("id").values_list("id", "frm_to"))
我有这个查询集
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'}]
我不明白为什么第 4 项的元素 {'40-60', 4} 是颠倒的。如何保证id在左边?
A
set
object is an "unordered" collection of distinct hashable objects.
元素 {2, '1-18'}
是 Python set
对象,它没有任何 order
您可以通过 print(type({2, '1-18'}))
来检查元素的类型,这显然会打印 set
。
为了确保 id 成为第一个,使用 tuple 而不是 set
ranges_list = [<b>(item.id, item.frm_to)</b> 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
查询。
它将 return 一个可迭代的查询集结果而不是一个列表 - 如果你真的需要一个列表,只需调用 list()
构造函数即可:
ranges_list = list(AgeRangeobjects.all().order_by("id").values_list("id", "frm_to"))