0

Djangoから次の2つのValueQuerySetがあります。

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

dict2 = [{'user': 1, 'name': 'Joe'}, {'user': 2, 'name': 'Paula'}]

2つのValueQuerySetをマージして、次の情報を取得するにはどうすればよいですか。

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

どうすればいいですか?これらをPythonの辞書リストに戻すことを考えましたが、それが機能する場合でも、どのようにアプローチすればよいか正確にはわかりません。

4

2 に答える 2

2

より効率的なため、最初に 1 つのクエリでこれを取得できるかどうかを確認することをお勧めします。しかし、最初の list を 2 番目の list で更新したい場合、それらは両方とも同じ順序です:

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ループを使用するソリューションは効率的ではないため、避けます。

于 2012-05-16T19:59:40.530 に答える
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)]   
于 2012-05-16T19:50:18.613 に答える