【问题标题】:How can I create a dictionary of two lists that preserves the order of the first list in the minimum number of queries?如何创建一个包含两个列表的字典,以在最少的查询次数中保留第一个列表的顺序?
【发布时间】:2012-03-06 11:33:10
【问题描述】:

假设我在 QuerySet 中有一个电影 ID 列表,格式如下:

movie_ids = [12,4,9,16]

现在,我想提取相应电影的列表。我还想尽量减少查询次数。所以我做了以下事情:

movies = Movie.objects.filter(pk__in=movie_ids)

但是,此查询不能保证电影的对应电影对象的顺序与它们在 movie_ids 中的顺序相同,对吗?有没有办法保证顺序(这样每个movie_id都对应正确的电影),所以我可以将两个列表配对成字典:

id_movies = dict(zip(movie_ids, movies))

这将在我的 Django 模板中使用。

【问题讨论】:

标签: python django dictionary django-queryset


【解决方案1】:

你可以像使用字典一样

# Create the dict for the movies object.
id_movies = dict([(m.id, m) for m in movies])

# Get the data in order.
order_movies = [id_movies[i] for i in movie_ids]

这样你会按照你给的顺序得到对象。

【讨论】:

  • 这太棒了!非常感谢!
  • 现在我们首先创建列表并从中创建字典。有什么理由不使用 {m.id : m for m in movies} 内联的 (?) 事情吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-28
  • 2019-12-12
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2019-09-27
相关资源
最近更新 更多