【问题标题】:arrange keys order in a django queryset在 django 查询集中排列键顺序
【发布时间】:2017-11-19 00:40:49
【问题描述】:

我有这个 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 中实现吗?

【问题讨论】:

  • dicts 不保证顺序有什么不清楚的地方?
  • 很明显,我只是想知道 不保证 条件是否可以被规避。

标签: python django dictionary django-queryset


【解决方案1】:

你可能需要这个:

导入收藏

添加了记住订单条目的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`

希望对您有所帮助, 咻!

【讨论】:

  • 它完全符合我的要求,grazie!
【解决方案2】:

这其实和python有关。这是对已经回答的同一问题的交叉引用。

Sorting dictionary keys in python

您只能获得键列表的排序表示。

【讨论】:

  • 可能我解释的不是很清楚,我想排列键的顺序,而不是排序。我需要字典,而不是排序的表示。我会更新我的问题。
  • @MattiaPaterna 您无法对字典进行排序。 Python 在存储值时会在内部更改键的顺序。
【解决方案3】:

一种方法是使用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

【讨论】:

    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 2021-05-05
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多