我有来自Django的以下两个ValueQuerySets。
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的词典列表,但我不确定如何处理它,即使它有效。
答案 0 :(得分:2)
我首先建议您尝试查看是否可以在一个查询中获取此信息,因为它更有效。但是,如果您想使用第二个列表更新第一个列表,并且它们的顺序相同:
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循环的解决方案,因为它不会那么有效。
答案 1 :(得分:0)
如果它们只是无序的列表或词典,那就是
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)]