Thoi Mai
Thoi Mai

Reputation: 33

Merging multiples lists with same length when matching conditions

given input: theList = [<userID>,<number_of_views>]

theList = [
    [[3, 5], [1, 1], [2, 3]],
    [[1, 2], [3, 5], [3, 0], [2, 3], [4, 2]],
    [[1, 2], [3, 5], [3, 0], [2, 3], [4, 2]],
    [[1, 2], [1, 1], [4, 2]]
]

expected output = [
    [[3, 5], [2, 3], [1, 1]],
    [[3, 5], [2, 3], [1, 2], [4, 2]],
    [[3, 5], [2, 3], [1, 2], [4, 2]],
    [[1, 3], [4, 2]]
]

for sublist in theList:

e.x -->

theList[3] = [[1,2], [1,1], [4,2]]

how to merge items that have same userIDs = 1 in this case and sum all the corresponding views to this (userID=1) (2+1) = 3 views into a new_list --> [1,3]

expected theList[3] = [[1,3], [4,2]].

How could I make this process for all theList?

Thanks so much for spending time on this question!

Upvotes: 3

Views: 19

Answers (1)

Rakesh
Rakesh

Reputation: 82765

This is one approach using collections.defaultdict.

Ex:

from collections import defaultdict

theList = [
    [[3, 5], [1, 1], [2, 3]],
    [[1, 2], [3, 5], [3, 0], [2, 3], [4, 2]],
    [[1, 2], [3, 5], [3, 0], [2, 3], [4, 2]],
    [[1, 2], [1, 1], [4, 2]]
]

result = []
for i in theList:
    r = defaultdict(int)
    for j, k in i:
        r[j] += k
    result.append(list(r.items()))

print(result)

Output:

[[(3, 5), (1, 1), (2, 3)],
 [(1, 2), (3, 5), (2, 3), (4, 2)],
 [(1, 2), (3, 5), (2, 3), (4, 2)],
 [(1, 3), (4, 2)]]

Upvotes: 2

Related Questions