Python中使用字典列表的pool.starmap是什么?

10

是否有类似于pools.starmap的函数可以用于字典列表?

与其说: pools.starmap(func, iterable_of_tuple)

你需要: pools.starmapdict(func, iterable_of_dictionaries)

这样,starmapdict函数就负责拆开函数参数的字典。


1
我也想知道答案。解决方案是使用map,然后在´func´函数内部自己解包参数。 - Roko Mijic
当您使用由字典可迭代对象初始化的标准starmap时会发生什么? - monkut
3个回答

2
我使用的解决方法是:
from multiprocessing import Pool
    
data = [{"name": "Delphi", "age": 13}, {"name": "Orion", "age":24}, {"name": "Asher"}, {"name": "Baccus"}]
    
def fun_wrapper(dict_args):
    return fun(**dict_args)
    
def fun(name="Iseult", age=30):
    print(name, age)
    
if __name__ == '__main__':
    with Pool(3) as pool:
        pool.map(fun_wrapper, data)

fun_wrapper函数负责解包字典并将其传递给fun函数。


0

这是一个有点老的问题,但我有答案:

不要使用StarMap;使用Map

假设,

pool.starmap(func, list_of_dictionaries)

改为:

pool.map(func, list_of_dictionaries)

上下文

文档中,

map()和starmap()之间的区别类似于function(a,b)和function(*c)之间的区别。

因此,使用包含字典列表的starmap将解压缩字典键作为参数;这根本不是你想要的。

完整示例

使用starmap出错

from multiprocessing import Pool
data = [
 {"name": "Delphi"}, {"name": "Orion"}, {"name": "Asher"}, {"name": "Baccus"}
]
def fun(*args):
 print(args)

with Pool(4) as pool:
    pool.starmap(fun,data)
#Prints: """
$> name
$> name
$> name
$> name
"""

使用 map 进行工作

from multiprocessing import Pool
data = [
 {"name": "Delphi"}, {"name": "Orion"}, {"name": "Asher"}, {"name": "Baccus"}
]
def fun(object):
 print(object)

with Pool(4) as pool:
    pool.map(fun,data)
#Prints: """
$> {"name": "Delphi"}
$> {"name": "Orion"}
$> {"name": "Asher"}
$> {"name": "Baccus"}
"""

它实际上并不按我所期望的方式工作。在你的代码中,“object”仍然是一个字典。我想要使用的fun函数更像:def fun(name="Iseult",age=30):print(name,age) 我只提供了我找到这个问题唯一解决方案的答案。 - Tiphaine Champetier

0
我使用了以下内容:

pools.starmap(func, zip(iterable_of_dictionaries.keys(), iterable_of_dictionaries.values())

编辑1:

>>> d = {"a": "1", "b": "2"}

>>> print(d.items())
dict_items([('a', '1'), ('b', '2')])


>>> print(d.keys(), d.values())
dict_keys(['a', 'b']) dict_values(['1', '2'])


2
zip(d.keys(), d.values()) 不就等同于 d.items() 吗? - monkut
编辑了答案。 - Neeraj Sonaniya
问题并不是询问一个字典,而是关于一个字典列表的。 - Casey Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接