I have two dictionaries, but for simplification, I will take these two:

```
>>> x = dict(a=1, b=2)
>>> y = dict(a=2, b=2)
```

Now, I want to compare whether each `key, value`

pair in `x`

has the same corresponding value in `y`

. So I wrote this:

```
>>> for x_values, y_values in zip(x.iteritems(), y.iteritems()):
if x_values == y_values:
print 'Ok', x_values, y_values
else:
print 'Not', x_values, y_values
```

And it works since a `tuple`

is returned and then compared for equality.

My questions:

Is this correct? Is there a *better* way to do this? Better not in speed, I am talking about code elegance.

UPDATE: I forgot to mention that I have to check how many `key, value`

pairs are equal.

If you want to know how many values match in both the dictionaries, you should have said that :)

Maybe something like this:

```
shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
print len(shared_items)
```

What you want to do is simply `x==y`

What you do is not a good idea, because the items in a dictionary are not supposed to have any order. You might be comparing `[('a',1),('b',1)]`

with `[('b',1), ('a',1)]`

(same dictionaries, different order).

For example, see this:

```
>>> x = dict(a=2, b=2,c=3, d=4)
>>> x
{'a': 2, 'c': 3, 'b': 2, 'd': 4}
>>> y = dict(b=2,c=3, d=4)
>>> y
{'c': 3, 'b': 2, 'd': 4}
>>> zip(x.iteritems(), y.iteritems())
[(('a', 2), ('c', 3)), (('c', 3), ('b', 2)), (('b', 2), ('d', 4))]
```

The difference is only one item, but your algorithm will see that *all* items are different

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow