-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Automatically remove duplicate dictionary keys #1710
Conversation
56b3b4c
to
9b6c1ce
Compare
This is incorrect: -d = {"b": 2, "a": 1, "b": 2}
+d = {"b": 2, "a": 2} |
9b6c1ce
to
e972880
Compare
values[j - 1].end_location.unwrap(), | ||
values[j].end_location.unwrap(), | ||
) | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this can maybe be reduced to a single case? But it's 12:30 so I'm gonna revisit in the morning.
for i in 0..num_keys { | ||
let k1: Option<DictionaryKey> = (&keys[i]).try_into().ok(); | ||
for j in i + 1..num_keys { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This quadratic loop could be slow on a large dictionary. A HashMap
would avoid that problem.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice idea.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Literally a leetcode problem and I failed it!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@andersk - Do you think it's important to avoid removing duplicate keys with non-identical values?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we do, it's hard to avoid quadratic time in pathological cases because values aren't hashable. As an alternative, I could stringify them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did start on that, but f64
itself isn't hashable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can hash via f64::to_bits
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mmm ok, cool. I'll try that out. (Above, you're suggesting that ComparableExpr
compares by ignoring the Location
fields, right?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will come in a separate PR.
c485f76
to
eac452d
Compare
eac452d
to
11fbff1
Compare
11fbff1
to
f44efae
Compare
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://github.com/charliermarsh/ruff) | `^0.0.214` -> `^0.0.215` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.215/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.215/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.215/compatibility-slim/0.0.214)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.215/confidence-slim/0.0.214)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.215`](https://github.com/charliermarsh/ruff/releases/tag/v0.0.215) [Compare Source](https://github.com/charliermarsh/ruff/compare/v0.0.214...v0.0.215) #### What's Changed - Automatically remove duplicate dictionary keys by [@​charliermarsh](https://github.com/charliermarsh) in [astral-sh/ruff#1710 - Add `ComparableExpr` hierarchy for comparing expressions by [@​charliermarsh](https://github.com/charliermarsh) in [astral-sh/ruff#1721 - Respect isort:skip action comment by [@​charliermarsh](https://github.com/charliermarsh) in [astral-sh/ruff#1722 - Treat failures to fix TypedDict conversions as debug logs by [@​charliermarsh](https://github.com/charliermarsh) in [astral-sh/ruff#1723 - Implement `--isolated` CLI flag by [@​charliermarsh](https://github.com/charliermarsh) in [astral-sh/ruff#1727 - Add more unittest assert methods to PT009 by [@​harupy](https://github.com/harupy) in [astral-sh/ruff#1730 - Add `RUFF_FORMAT` environment variable support by [@​messense](https://github.com/messense) in [astral-sh/ruff#1731 - Move RUFF_CACHE_DIR to Clap's env support by [@​charliermarsh](https://github.com/charliermarsh) in [astral-sh/ruff#1733 - buf-fix: flake8\_simplify SIM212 by [@​chammika-become](https://github.com/chammika-become) in [astral-sh/ruff#1732 - Remove `assertNotContains` by [@​harupy](https://github.com/harupy) in [astral-sh/ruff#1729 **Full Changelog**: astral-sh/ruff@v0.0.214...v0.0.215 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/ixm-one/pytest-cmake-presets). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC44NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuODQuMiJ9--> Signed-off-by: Renovate Bot <bot@renovateapp.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
For now, to be safe, we're only removing keys with duplicate values.
See: #1647.