Такого рода общие тайминги редко бывают полезны, поскольку производительность определяется гораздо более широким набором переменных, специфичных для данных, приложения и среды, о которых идет речь, но для предоставления простых данных сравнения приведем несколько тестов, которые выможно копировать и пробовать в вашей собственной среде.
Простая итерация без доступа к значениям dict Не удивительно, что разница между производительностью очень мала, за исключением того, что dict.items()
работает немного позади, поскольку создает представление. обоих ключей и значений (в то время как другие показанные методы имеют дело только с одним или другим).
from timeit import timeit
loop = """
d = dict(zip(range(1000), reversed(range(1000))))
for k in d: pass"""
print(timeit(stmt=loop, number=10000))
# 1.0733639170002789
keys = """
d = dict(zip(range(1000), reversed(range(1000))))
for k in d.keys(): pass"""
print(timeit(stmt=keys, number=10000))
# 1.0360493710004448
values = """
d = dict(zip(range(1000), reversed(range(1000))))
for v in d.values(): pass"""
print(timeit(stmt=values, number=10000))
# 1.0380961279997791
items = """
d = dict(zip(range(1000), reversed(range(1000))))
for v in d.items(): pass"""
print(timeit(stmt=items, number=10000))
# 1.2011308679993817
Повторение при доступе к значению для каждого ключа в попытке выровнять игровое поле неудивительно, что dict.items()
немного быстрее, когда вам нужно выполнить итерацию и получить доступ к ключам и значениям.
from timeit import timeit
loop = """
d = dict(zip(range(1000), reversed(range(1000))))
for k in d: d[k]"""
print(timeit(stmt=loop, number=10000))
# 1.4128917540001567
keys = """
d = dict(zip(range(1000), reversed(range(1000))))
for k in d.keys(): d[k]"""
print(timeit(stmt=keys, number=10000))
# 1.3668724469998779
items = """
d = dict(zip(range(1000), reversed(range(1000))))
for v in d.items(): pass"""
print(timeit(stmt=items, number=10000))
# 1.1864945030001763