> On Jun 21, 2016, at 10:18 AM, Guido van Rossum <gu...@python.org> wrote: > > Judging from Inada's message there seems to be some confusion about how well > the compact dict preserves order (personally I think if it doesn't guarantee > order after deletions it's pretty useless).
Inada should follow PyPy's implementation of the compact dict which does preserve order after deletions (see below). My original proof-of-concept code didn't have that feature; instead, it was aimed at saving space and speeding-up iteration. The key ordering was just a by-product. Additional logic was needed to preserve order for interleaved insertions and deletions. Raymond ---(PyPy test of order preservation)------------------------------------------------------------- 'Demonstrate PyPy preserves order across repeated insertions and deletions' from random import randrange import string s = list(string.letters) d = dict.fromkeys(s) n = len(s) for _ in range(10000): i = randrange(n) c = s.pop(i); s.append(c) d.pop(c); d[c] = None assert d.keys() == s ---(PyPy session showing order preservation)-------------------------------------------------- $ pypy Python 2.7.10 (c09c19272c990a0611b17569a0085ad1ab00c8ff, Jun 13 2016, 03:59:08) [PyPy 5.3.0 with GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>> d = dict(raymond='red', rachel='blue', matthew='yellow') >>>> del d['rachel'] >>>> d['cindy'] = 'green' >>>> d['rachel'] = 'azure' >>>> d {'raymond': 'red', 'matthew': 'yellow', 'cindy': 'green', 'rachel': 'azure'} _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com