Transwert
Transwert

Reputation: 83

searching element of 1-D list in 2-D list

I have two lists, one is of form:

A = ["qww","ewq","ert","ask"]
B = [("qww",2) ,("ert",4) , ("qww",6), ("ewq" , 5),("ewq" , 10),("ewq" , 15),("ask",11)]

I have to process such that final output is

C = A = [("qww",8),("ewq",20),("ert",4),("ask",11)]

for that I written code:

# in code temp_list is of form A
# in code total_list is of form B
# in code final is of form C

def ispresent(key,list):
    for qwerty in list:
        if qwerty == key:
            return 1
        else:
            return 0

def indexreturn(key,list):
    counter = 0
    for qwerty in list:
        if qwerty != key:
            counter = counter + 1
        else:
            return counter

def mult_indexreturn(key,list):
    for i in range(len(list)):
        if key == list[i][0]:
                return i

final = map(lambda n1, n2: (n1,n2 ), temp_list,[ 0 for _  in range(len(temp_list))])

for object2 in total_list:#****
    for object1 in temp_list:
        if object2 == object1:
            final[  indexreturn(object2,final) ][1] = final[  indexreturn(object2, final)  ][1] + object2[mult_indexreturn(object2,total_list)][1]#total_list[ mult_indexreturn(object2,total_list) ][1]
print(final)

it should give output as C type list, but giving nothing but C = [("qww",0),("ewq",0),("ert",0),("ask",0)]

according to me the main problem is in my looping part ( with **** comment), is there problem with logic or something else. I gave in lot of codes, so that you can understand how my code working

Upvotes: 0

Views: 38

Answers (3)

Mykola Zotko
Mykola Zotko

Reputation: 17794

You can build a dictionary using the method fromkeys() and subsequently you can use the for loop to accumulate integers:

A = ["qww","ewq","ert","ask"]
B = [("qww",2) ,("ert",4) , ("qww",6), ("ewq" , 5),("ewq" , 10),("ewq" , 15),("ask",11)]

C = dict.fromkeys(A, 0)
# {'qww': 0, 'ewq': 0, 'ert': 0, 'ask': 0}

for k, v in B:
    C[k] += v

C = list(C.items())
# [('qww', 8), ('ewq', 30), ('ert', 4), ('ask', 11)]

Upvotes: 1

Rakesh
Rakesh

Reputation: 82765

Using collection.defaultdict

Ex:

from collections import defaultdict 
A = ["qww","ewq","ert","ask"]
B = [("qww",2) ,("ert",4) , ("qww",6), ("ewq" , 5),("ewq" , 10),("ewq" , 15),("ask",11)]


result = defaultdict(int) 
for key, value in B: 
    if key in A:             #Check if Key in A. 
        result[key] += value  #Add Value. 
print(result)

Output:

defaultdict(<type 'int'>, {'qww': 8, 'ert': 4, 'ewq': 30, 'ask': 11})

Upvotes: 0

Mehrdad Pedramfar
Mehrdad Pedramfar

Reputation: 11073

Try this:

from collections import defaultdict 

result = defaultdict(int) 
for i in A: 
    result[i] = sum([j[1] for j in B if j[0] == i])

then tuple(result.items()) will be your out put.

Or you can do it in just one line:

result = tuple({i:sum([j[1] for j in B if j[0] == i]) for i in A}.items())

Upvotes: 0

Related Questions