foosion
foosion

Reputation: 7928

dict.keys() equality, order irrelevant

Why do I get True why comparing dict.keys() when the keys are in different orders? I'm on windows cpython 3.10, which preserves insertion order since 3.6+, but I wonder if this result holds for earlier versions.

d1 = {1:2, 2:3, 3:4}
d2 = {3:5, 2:6, 1:7}

print(d1.keys() == d2.keys()) # True
print(list(d1.keys()) == list(d2.keys())) # False

Upvotes: 1

Views: 107

Answers (2)

tdelaney
tdelaney

Reputation: 77407

Dict keys may be retrieved in insertion order but its still a set, and sets should compare regardless of order. In fact, all set comparison operations work (and return python set when appropriate). It would be strange if d1 | d2 operated differently depending on insertion order. Equality is the same.

Upvotes: 1

constantstranger
constantstranger

Reputation: 9389

The docs for Dictionary view objects explain as follows:

Keys views are set-like since their entries are unique and hashable. If all values are hashable, so that (key, value) pairs are unique and hashable, then the items view is also set-like. (Values views are not treated as set-like since the entries are generally not unique.) For set-like views, all of the operations defined for the abstract base class collections.abc.Set are available (for example, ==, <, or ^).

So == will work just as if dict.keys() were a set.

Upvotes: 7

Related Questions