2017-11-08 11 views
1

長さの異なる3つのリストがあります。彼らはこのように作られています:私はこのようなfinal_listを取得したい何Pythonの長さが異なる合計リスト

final_list = [[1230, 0], [1231,0],[1232,0], [1233, 0], [1234, 0]] 

list2 = [[1232, 20], [1233, 30]] 
list3 = [[1230, 10], [1231,20],[1232,40]] 

:、リスト2とLIST3の各要素を考慮すると、その最初の値は以下のいずれかに等しい場合

final_list = [[1230, 10], [1231,20],[1232,60], [1233, 30], [1234, 0]] 

(最後のリストの最初の要素である場合、最終リストの対応する要素は、見つかった要素の合計に等しい第2の値を持たなければなりません)。

+3

追加、ソート、グループ、追加します。 –

+2

また、代わりに辞書を使用したい – user3080953

答えて

0

清潔な解決策ではありませんが、把握しやすく、あなたはitertools

import groupby from itertools 

merged = list2+list3 
final_list = [] 

for key, group in groupby(merged, key = lambda e: e[0]): 
    final_list.append([key, sum(j for i, j in group)]) 

やoneliner

[[k, sum(j for i, j in g)] for k, g in groupby(list3+list2, key = lambda e: e[0])] 
0

に精通している場合

f = {} 
dcts = map(lambda l: dict([l]), list2+list3) 
for dct in dcts: 
    for k in dct.iterkeys(): 
     f[k] = w.get(k, 0) + d[k] 
final_list = map(list, f.items()) 

は、しかし、私はtemp_listを作成し、そこにすべての3つのリストを追加します。 辞書dicを作成し、temp_listをループして、キーの各タプルベースを集計します。 その後、dicをリストに戻してソートします。

私はこれを行う最も効率的な方法ではないことを認めます。それは解決策です。

temp_list = [] 
temp_list.append(final_list) 
temp_list.append(list2) 
temp_list.append(list3) 

dic = {} 

for lst in temp_list: 
    for tp in lst: 
     if tp[0] in dic: 
      dic[tp[0]] = dic[tp[0]] + tp[1] 
     else: 
      dic[tp[0]] = tp[1] 

result = [] 

for key, value in dic.iteritems(): 
    temp = [key,value] 
    result.append(temp) 

result.sort() 

結果:

[(1230, 10), (1231, 20), (1232, 60), (1233, 30), (1234, 0)]

関連する問題