remove key-existence checks against dict.keys() calls #11694
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
While looking over some performance improvements for SQS, I've stumbled into a key existence checks like that
if key in dict.keys()
.Calling
dict.keys()
will create a dict view of the dict keys. In itself, this is not terrible, but it has a bit of a cost performance.Giving it a small benchmark:
Small benchmarking code
Give the following results for a dictionary with 1000 entries:
in dict.keys()
: 0.04537 (+62%)in dict
0.02794(Changing the dict size does not change the results too much, it's always at least +50%)
I thought about introducing a lint rule for it, I found the following
SIM118
, but it's a bit too eager and will also changefor
loops, which I believe sometimes makes it a bit more readable and I haven't touched yet.https://docs.astral.sh/ruff/rules/in-dict-keys/
Changes
dict.keys()
in favor ofin dict
.