Created
May 10, 2012 08:25
-
-
Save anonymous/2651872 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def equal_dicts_1(a, b, ignore_keys): | |
ka = set(a).difference(ignore_keys) | |
kb = set(b).difference(ignore_keys) | |
return ka == kb and all(a[k] == b[k] for k in ka) | |
def equal_dicts_2(d1, d2, ignore_keys): | |
d1_filtered = dict((k, v) for k,v in d1.iteritems() if k not in ignore_keys) | |
d2_filtered = dict((k, v) for k,v in d2.iteritems() if k not in ignore_keys) | |
return d1_filtered == d2_filtered | |
def equal_dicts_3(d1, d2, ignore_keys): | |
ignored = set(ignore_keys) | |
for k1, v1 in d1.iteritems(): | |
if k1 not in ignored and (k1 not in d2 or d2[k1] != v1): | |
return False | |
for k2, v2 in d2.iteritems(): | |
if k2 not in ignored and k2 not in d1: | |
return False | |
return True | |
def equal_dicts_4(d1, d2, ignore_keys): | |
ignore = set(ignore_keys) | |
for k in d1: | |
if k in ignore_keys: | |
continue | |
try: | |
if d1[k] != d2[k]: | |
return False | |
except KeyError: | |
return False | |
for k in d2: | |
if k in ignore_keys: | |
continue | |
try: | |
if d1[k] != d2[k]: | |
return False | |
except KeyError: | |
return False | |
return True | |
def equal_dicts_5(d1, d2, ignore_keys): | |
return {k: v for k,v in d1.iteritems() if k not in ignore_keys} == {k: v for k,v in d2.iteritems() if k not in ignore_keys} | |
setup = """ | |
a = {chr(c):c for c in range(255)} | |
b = {chr(c):c for c in range(255)} | |
""" | |
import timeit | |
results = [] | |
for k, v in locals().items(): | |
if callable(v): | |
imp = 'from __main__ import ' + k + '\n' | |
t = timeit.timeit(k + '(a,b,["foo"])', imp + setup, number=1000) | |
results.append((t, k)) | |
for p in sorted(results): | |
print '%.4f %s' % p | |
#0.0897 equal_dicts_1 | |
#0.1225 equal_dicts_5 | |
#0.1309 equal_dicts_4 | |
#0.1489 equal_dicts_3 | |
#0.1689 equal_dicts_2 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment