在django查询集中排列键顺序

时间:2017-06-16 09:33:42

标签: python django dictionary django-queryset

我有这个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中做到这一点?

3 个答案:

答案 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)

这实际上与python有关。以下是对已回答的同一问题的交叉引用。

Sorting dictionary keys in python

您只能获得密钥列表的已排序表示。

答案 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