我有这个Django查询,我从不同的数据库中获取一些信息,我希望将其暴露给前端:
specifics = PageData.objects.filter(page_id__in=page_ids).values('page_id'). \
annotate(views=Count('page_id')). \
values('views', 'page__title', 'page__content_size')
反过来给了我一个词典列表 - 提示是list(specifics)
:
[
{'page__content_size': 19438L,
'page__title': u'Bosch Tassimo Charmy anmeldelse. Positivt: Bryggehastighed. Negativt: Placering af vandtanken. | 96 Grader',
'views': 5},
[…]
{'page__content_size': 19395L,
'page__title': u'Banwood First Go Balance Bike - studiominishop.com',
'views': 1}
]
我希望能够安排每个词典中键的顺序,这意味着我提供了必需的特定顺序。列表中的每个元素的顺序始终相同。
有没有办法在Django或Python中做到这一点?
答案 0 :(得分:2)
你可能需要这个:
导入集合
OrderedDict dict子类记住了添加的订单条目
此处的文档:https://docs.python.org/3/library/collections.html#collections.OrderedDict
在这里你可以找到一个完整的例子:
https://pymotw.com/2/collections/ordereddict.html
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'
for k, v in d.items():
print k, v`
希望这个帮助, 侨!
答案 1 :(得分:1)
答案 2 :(得分:1)
一种方法是使用values_list
代替values
。但是,这会返回tuples
的列表而不是dictionaries
的列表,但所有元素的顺序始终相同。
specifics = PageData.objects.filter(
page_id__in=page_ids).values('page_id').annotate(
views=Count('page_id')).values_list(
'views', 'page__title', 'page__content_size')
值始终采用values_list
中指定的顺序,而是元组而不是字典。
[
(5, u'Bosch Tassimo Charmy anmeldelse. Positivt: Bryggehastighed. Negativt: Placering af vandtanken. | 96 Grader', 19438L),
[…]
(1, u'Banwood First Go Balance Bike - studiominishop.com', 19395L)
]
Python dictionary does not guarantee the order