[foo(item['fieldA'], item['fieldC']) for item in barlist]
是否有对应的 map ?
我的意思是,像这样:
map(foo, [(item['fieldA'], item['fieldB']) for item in barlist])
但它不起作用。 只是好奇。
最佳答案
您正在寻找itertools.starmap()
:
from itertools import starmap
starmap(foo, ((item['fieldA'], item['fieldB']) for item in barlist))
starmap
将可迭代对象中的每个项目作为单独的参数 应用于可调用对象。嵌套的生成器表达式可以替换为 operator.itemgetter()
object更多贴图优势:
from itertools import starmap
from operator import itemgetter
starmap(foo, map(itemgetter('fieldA', 'fieldB'), barlist))
与 itertools
中的所有可调用对象一样,这会生成一个迭代器,而不是一个列表。但是,如果您使用的是 Python 3,那么 map()
也是如此。如果您使用的是 Python 2,将 map()
换成 itertools.imap()
可能是个好主意在这里。
关于python - map 等价于列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23763300/