Python 如何用另一个ValueQuerySet更新ValueQuerySet?

Python 如何用另一个ValueQuerySet更新ValueQuerySet?,python,django,Python,Django,我有来自Django的以下两个ValueQuerySet dict1 = [{'user': 1, 'total_bookmarked': 2}, {'user': 2, 'total_bookmarked': 3}] dict2 = [{'user': 1, 'name': 'Joe'}, {'user': 2, 'name': 'Paula'}] 如何合并两个ValueQuerySet,以便获得以下内容: dict3 = [{'user': 1, 'name': 'Joe', 'tota

我有来自Django的以下两个ValueQuerySet

dict1 = [{'user': 1, 'total_bookmarked': 2}, {'user': 2, 'total_bookmarked': 3}]

dict2 = [{'user': 1, 'name': 'Joe'}, {'user': 2, 'name': 'Paula'}]
如何合并两个ValueQuerySet,以便获得以下内容:

dict3 = [{'user': 1, 'name': 'Joe', 'total_bookmarked':2}, {'user': 2, 'name': 'Paula', 'total_bookmarked': 3}]

我该怎么做?我曾考虑过将它们转换回Python字典列表,但我不确定如何处理它,即使它是有效的。

如果它们只是无序的列表或字典,那就太好了

list1 = [{'user': 1, 'total_bookmarked': 2}, {'user': 2, 'total_bookmarked': 3}]
list2 = [{'user': 1, 'name': 'Joe'}, {'user': 2, 'name': 'Paula'}]
list3 = []
for d1 in list1:
    for d2 in list2: 
        if d1['user'] == d2['user']:
            d3 = dict(d1.items()+d2.items()
            list3.append(d3)
            break
        else:
            continue
如果您的列表是按用户排序的,那么有一种更好的方法

list1 = [{'user': 1, 'total_bookmarked': 2}, {'user': 2, 'total_bookmarked': 3}]
list2 = [{'user': 1, 'name': 'Joe'}, {'user': 2, 'name': 'Paula'}]

list3 = [dict(d1.items()+d2.items()) for (d1, d2) in zip(list1,list2)]   

我首先建议您尝试看看是否可以在一个查询中得到这个结果,因为它更有效。但是,如果要用第二个列表更新第一个列表,并且它们的顺序相同,请执行以下操作:

list1 = [{'user': 1, 'total_bookmarked': 2}, {'user': 2, 'total_bookmarked': 3}]
list2 = [{'user': 1, 'name': 'Joe'}, {'user': 2, 'name': 'Paula'}]

for a,b in zip(list1, list2):
    a.update(b)
如果它们是非常大的列表,您可以使用
izip

from itertools import izip

for a,b in izip(list1, list2):
    a.update(b)
如果由于某种原因,它们尚未按用户进行排序:

from operator import itemgetter

list1.sort(key=itemgetter('user'))
list2.sort(key=itemgetter('user'))

我会避免使用嵌套for循环的解决方案,因为这样效率不高。

是否不可能在一个查询中获得这些内容?这会更有效率。值得指出的是,最新的dicts列表正在更新中list1@PaulSeeb:我已经说过它会用第二个列表更新第一个列表。