在 Python 中迭代字典键的最快方法是什么?

Gab*_*ele 0 python performance

我曾经使用迭代器迭代字典的键.keys()

for _ in dictionary.keys():
Run Code Online (Sandbox Code Playgroud)

但是,我看到使用以下方式:

for _ in [*dictionary]:
Run Code Online (Sandbox Code Playgroud)

然后,在研究这项技术时,我看到另一种方法被建议作为标准:

for _ in dictionary:
Run Code Online (Sandbox Code Playgroud)

这些方法中哪一种最快?

Gab*_*ele 6

我尝试了以下方法(测量详情见下文):

def simplest(d):
    for _ in d:
        pass
    
def extract(d):
    for _ in [*d]:
        pass
    
def keys(d):
    for _ in d.keys():
        pass
    
def items(d):
    for _ in d.items():
        pass
Run Code Online (Sandbox Code Playgroud)

结果如图所示。 不同方法的时间 直接访问(使用.__iter__()方法)是最快的解决方案,也可以说是最具可读性的解决方案。

测量

import time
def measure(method, dict_size):
    dictionary = {f'{i}': i for i in range(dict_size)}
    ts = time.time()
    result = method(dictionary)
    te = time.time()
    return {'name': method.__name__, 'size': dict_size, 'time': (te - ts) / 1000}

import itertools
time_results = []
for _ in range(5):
    time_results.extend([measure(method, size) for method, size in itertools.product([simplest, extract, keys, items], np.logspace(1, 7, base=10, num=7).astype(int))])
    
Run Code Online (Sandbox Code Playgroud)

  • 如果您对列表压缩进行比较,那就太好了......很好的总结! (2认同)