关于python:在django查询集中排列键顺序

arrange keys order in a django queryset

我有一个django查询,在这里我从不同的数据库中获取一些信息,我想将这些信息公开给前端:

1
2
3
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)

1
2
3
4
5
6
7
8
9
[
{'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中有什么方法可以做到这一点吗?


你可能需要这个:

import collections

OrderedDict dict subclass that remembers the order entries were added

文档:https://docs.python.org/3/library/collections.html collections.ordereddict

您可以在这里找到一个完整的示例:

https://pymotw.com/2/collections/ordereddict.html网站

1
2
3
4
5
6
7
8
9
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`

希望这有帮助,再见!


一种方法是使用values_list而不是values。然而,这将返回EDOCX1的列表(2),而不是EDOCX1的列表(3),但在所有元素中顺序始终相同。

1
2
3
4
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中指定的顺序排列,但使用元组而不是字典。

1
2
3
4
5
[
    (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


这实际上与Python有关。这里是对已经回答的同一个问题的交叉引用。

在python中排序字典键

只能获得键列表的已排序表示形式。