处理python元组列表的最快方法

时间:2016-09-03 05:13:33

标签: python django

在Django项目中,我有一个python的元组列表,如下所示:

users_and_values = [(user_id,value),(user_id,value),......]

其中value可以是0.0或1.0(浮点数)。鉴于此列表,我需要创建一个新列表,如下所示:

[(user_object,value),(user_object,value),......]

其中user_object是与每个user_id关联的对象(包含用户属性等)。

实现这一目标的最有效方法是什么(性能和正确性都很重要)?目前,我正试图在Django视图中实现如下:

    user_ids = [user_id for user_id, value in users_and_values]
    user_objs = User.objects.filter(id__in=user_ids)
    context["votes"] = [(user_objs(user_id),value) for user_id, value in users_and_votes]

这给了我错误:

  

'查询集'对象不可调用

我也可以试过[(User.object.get(id=user_id),value) for user_id, value in users_and_values],但这会是太多的DB调用。那么,任何人都可以说出我做错了什么,以及正确的解决方案吗?提前致谢。

1 个答案:

答案 0 :(得分:2)

user_objs是一个无序的用户集合。您必须通过迭代将用户ID手动映射到相应的值:

user_ids = [user_id for user_id, value in users_and_values]
user_objs = User.objects.filter(id__in=user_ids)

ids_to_values = dict(users_and_values)  # {id1: value1, ...}
context["votes"] = [(user, ids_to_values[user.id]) for user in user_objs]