Как сопоставить элементы с результатами карты пула в python

#python

#python

Вопрос:

 from multiprocessing import Pool
def add (x):
    return x   2

if __name__ == '__main__':
    x = [('a', 1) ,('b', 2) ,('c', 3), ('d', 4)]
    y = list ()
    for items, values in x:
        y.append(values)
    p = Pool(5)
    response = p.map(add, y)
    print(response)
    p.close()
  

В приведенном выше случае я хочу сопоставить результаты [3, 4, 5, 6] с [‘a’, ‘b’, ‘c’, ‘d’]
, и это должно быть [(‘a’, 3) , (‘b’, 3) , (‘c’, 5), (‘d’, 6)]

Примечание: я не могу изменить функцию добавления

Комментарии:

1. Вы можете использовать понимание списка с zip : [(pair[0], result) for pair, result in zip(x, response)]

Ответ №1:

Как упоминал @alkasm, вы можете использовать понимание списка и zip связать список ввода со списком результатов. Вы также можете использовать понимание списка для создания y списка.

Попробуйте этот код:

 from multiprocessing import Pool
def add (x):
    return x   2

if __name__ == '__main__':
    x = [('a', 1) ,('b', 2) ,('c', 3), ('d', 4)]
    y = [e[1] for e in x]  # 1,2,3,4

    p = Pool(5)
    response = p.map(add, y)
    res = list(zip([e[0] for e in x], response))
    print(res)
    p.close()
  

Вывод

 [('a', 3), ('b', 4), ('c', 5), ('d', 6)]