有没有更快的方法来从字典中获取多个键?

千K:

我有一本字典:

d = {'a':1, 'b':2, 'c':3, 'd':4}

然后我有一个键列表:

l = ['a', 'b', 'z']

我想要的结果是:

[1, 2, None]

到目前为止,我正在做的是:

[d.get(k) for k in l]

有没有更快的方法?也许没有for

MSeifert:

您可以使用:

>>> list(map(d.get, l))
[1, 2, None]

它有两个优点:

  • 它只执行d.get一次查询-不会每次迭代
  • 仅CPython:由于dict.get是用C实现的,并且map是用C实现的,因此可以避免在函数调用中使用Python层(大致来说,细节要复杂一些)。

至于计时(在Jupyter笔记本中的Python 3.6上执行):

d = {'a':1, 'b':2, 'c':3, 'd':4}
l = ['a', 'b', 'z']

%timeit list(map(d.get, l))
594 ns ± 41.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit [d.get(k) for k in l]
508 ns ± 17.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

请注意,在这种情况下,这实际上要慢一些!那是因为总而言之,迭代maplist开销占主导。因此,如果您希望在较短的可迭代对象上更快,请坚持使用您的方法。

随着时间的推移,l您会看到list(map(...))最终变得更快:

d = {'a':1, 'b':2, 'c':3, 'd':4}
l = [random.choice(string.ascii_lowercase) for _ in range(10000)]

%timeit list(map(d.get, l))
663 µs ± 64.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit [d.get(k) for k in l]
1.13 ms ± 7.55 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

但是,这仍然“只是”快了2倍。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有更快的方法来禁用多个键

有没有更快的方法来在Linux中获取此输出文件

有没有更好的方法来获取字典列表中的字典值?

有没有更快,更有效的方法来保存python字典?

有没有更快的方法来获取和输出目录树中的所有文件名?

有没有更有效的方法来增加字典中每个键的值?

有没有比 for 循环更快的方法来对 javascript 中的图像进行阈值处理?

有没有一种更快的方法来搜索表中的值?

有没有更快的方法来检查列表中的列表是否等效?

有没有更快的方法来检查列表/集合中的一堆东西?

有没有一种更快的方法来在atom中执行拼写检查?

有没有更快的方法来遍历Sqlite查询中的行?

有没有更快的方法来在python中创建配对元素列表?

有没有更快的方法来在python中创建(0,1)组合列表?

有没有更快/更短的方法来在Rust结构中初始化变量?

有没有更快的方法来删除Excel中的形状

有没有更快的方法来小写 C 中的字符串?

有没有更快的方法来查找列表中的重复模式?

有没有更好的方法来实现这个没有多个获取请求?

有没有更有效的方法来在 Javascript 中的对象中获取多个最小值?

有没有一种简单的方法来获取Java中的多个随机值?

有没有比这更Python化的方法来遍历字典键来寻找值?

有没有更易读的方法来转换嵌套字典中的类型?

在Sklearn中,有没有一种干净的方法来转换字典列表?

有没有一种方法来获取多个列表python的索引?

有没有一种更快/更紧凑的方法来从正方形获取索引?(Matlab)

有没有更快的方法来获取MNIST数据集的本地二进制模式?

有没有一种快速的方法来更新嵌套字典中具有特定值的一组键?

有没有一种快速的方法来绘制Scilab中的多个图