python - 地图字典查找
问题描述
我有一个从字典中获取项目的功能:
def dict_lookup(dictionary, key):
return dictionary[key]
我将通过多处理映射此函数,以从一系列非常长的 dicts 中查找值:
dictlist = [{}, {}, {}]
dict_lookup_partial = functools.partial(dict_lookup, key=some_key)
with multiprocessing.Pool() as pool:
values = pool.map(dict_lookup_partial, dictlist)
我觉得我不应该定义一个从字典中获取值的函数。有一些内置的方法可以做到这一点吗?
解决方案
标准库的operator模块中的itemgetter函数提供了这种行为:
>>> import multiprocessing as mp
>>> import operator
>>> dictlist = [{'a': 1, 'b':2, 'c': 10}, {'a': 3, 'b': 4, 'c': 20},
{'a': 5, 'b': 6, 'c': 30}]
>>> agetter = operator.itemgetter('a')
>>> with mp.Pool() as pool:
... avalues = pool.map(agetter, dictlist)
...
>>> avalues
[1, 3, 5]
它还可以用于检索多个键的值:
>>> bcgetter = operator.itemgetter('b', 'c')
>>> with mp.Pool() as pool:
... bcvalues = pool.map(bcgetter, dictlist)
...
>>> bcvalues
[(2, 10), (4, 20), (6, 30)]
通常,操作员模块是寻找复制内置函数行为以用于或map
的函数的第一个位置。filter
reduce
推荐阅读
- c# - 添加 IList
> 给另一个 - r - 为什么缺少拟合值?
- laravel - laravel 7 从雄辩的关系列中获取总和
- java - 如何从 Java 运行使用 Homebrew 或 MacPorts 安装的工具?
- mysql - 将列值默认为查询结果
- yarnpkg - 如何使用 Yarn 工作区将共享依赖项添加到 monorepo?
- javascript - 共享 ECDH 密钥,浏览器 + NodeJS
- html - 阻止可拖动元素出现在下面,并在图像中制作内容
- flutter - 使用 Dart 对同一引用进行连续方法调用的最佳实践
- arrays - 如何在 Svelte 中创建一个更新到本地存储的嵌套数组存储?