リストのリストがあります。最初の 3 つの要素が共通のサブリストがある場合は、それらを 1 つのリストにマージし、4 番目の要素をすべて追加します。
この問題は、コードと必要な出力で最もよく説明されています。
a_list = [['apple', 50, 60, 7],
['orange', 70, 50, 8],
['apple', 50, 60, 12]]
# output:
# [['apple', 50, 60, 19], ['orange', 70, 50, 8]]
私はすでに同様の問題のコードを持っています (しばらく前にスタック オーバーフローの別のユーザーから提供されました) が、それを完全には理解していないため、それに応じて変更することはできません。このコードは、0 番目と 2 番目の要素が同じかどうかをチェックし、同じ場合はサブリストをマージし、1 番目と 3 番目の要素を追加します。
import defaultdict
data = [['42x120x1800', 50, '50x90x800', 60],
['42x120x1800', 8, '50x90x800', 10],
['2x10x800', 5, '5x9x80', 6]]
d = defaultdict(lambda :[0, 0])
for sub_list in data:
key = (sub_list[0], sub_list[2])
d[key][0] += sub_list[1]
d[key][1] += sub_list[3]
new_data = [[key[0], val[0], key[1], val[1]] for key, val in d.iteritems()]
# [['2x10x800', 5, '5x9x80', 6], ['42x120x1800', 58, '50x90x800', 70]]
新しい問題に適合するようにコードをどのように変更する必要がありますか? 時間をかけてコードも徹底的に説明していただければ幸いです。