首页 > 解决方案 > 在二维列表中搜索一维列表的元素

问题描述

我有两个列表,一个是形式:

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

我必须进行处理以使最终输出为

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

为此,我编写了代码:

# 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)

它应该以 C 类型列表的形式给出输出,但除了 C = [("qww",0),("ewq",0),("ert",0),("ask",0)]

根据我的说法,主要问题在于我的循环部分(带有****注释),逻辑或其他问题是否存在问题。我提供了很多代码,以便您了解我的代码是如何工作的

标签: pythonlistsearch

解决方案


您可以使用该方法构建一个字典fromkeys(),然后您可以使用for循环来累积整数:

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)]

推荐阅读