[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
Changes by Raymond Hettinger raymond.hettin...@gmail.com: -- resolution: - duplicate status: open - closed superseder: - general pprint rewrite ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
Ram Rachum added the comment: Maybe though this item should result in at least a test case for the future `pprint` redesign? -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
Raymond Hettinger added the comment: Please add a note to the other tracker item. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
akira added the comment: If it fits on a line then it seems Counter's repr is used: pprint(Counter({i:i*i for i in range(10)})) Counter({9: 81, 8: 64, 7: 49, 6: 36, 5: 25, 4: 16, 3: 9, 2: 4, 1: 1, 0: 0}) Otherwise It is shown as a dict (Counter is a dict subclass) if it is too large (multi-line): pprint(Counter({i:i*i for i in range(10)}), width=20) {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} the behaviour is weird but pprint doesn't promise that custom objects such as Counter that can't be created using Python literals will be printed in a reversible manner. It seems there is a special support for some objects: pprint(frozenset({i for i in range(10)})) frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) pprint(frozenset({i for i in range(10)}), width=20) frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) Perhaps the support for Counter could be added using functools.singledispatch and/or __prettyprint__ hook from issue #7434 -- nosy: +akira ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
Raymond Hettinger added the comment: I think this tracker item should be subsumed by the effort to write a better pprint API. That would be better than trying to hack special cases into the current code which doesn't allow straight-forward customizations or extensions. I recommend this entry be closed as a known problem that is just one of many and needs to be solved in a much larger context. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
New submission from Ram Rachum: pprint doesn't work well for counters, sometimes shows them like a dict Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32 Type help, copyright, credits or license for more information. dd={'a': 11640, 'b': 2614, 'c': 5261, 'd': 5311, 'e': 17722, 'f': 3041, 'g': 3570, 'h': 6740, 'i': 10729, 'j': 279, 'k': 1812, 'l': 6391, 'm': 5037, 'n': 10111, 'o': 11922, 'p': 3863, 'q': 99, 'r': 94 61, 's': 9444, 't': 13744, 'u': 4027, 'v': 1486, 'w': 3194, 'x': 540, 'y': 2976, 'z': 203} import collections collections.Counter(dd) Counter({'e': 17722, 't': 13744, 'o': 11922, 'a': 11640, 'i': 10729, 'n': 10111, 'r': 9461, 's': 9444, 'h': 6740, 'l': 6391, 'd': 5311, 'c': 5261, 'm': 5037, 'u': 4027, 'p': 3863, 'g': 3570, 'w': 3194, 'f ': 3041, 'y': 2976, 'b': 2614, 'k': 1812, 'v': 1486, 'x': 540, 'j': 279, 'z': 203, 'q': 99}) import pprint pprint.pprint(collections.Counter(dd)) {'a': 11640, 'b': 2614, 'c': 5261, 'd': 5311, 'e': 17722, 'f': 3041, 'g': 3570, 'h': 6740, 'i': 10729, 'j': 279, 'k': 1812, 'l': 6391, 'm': 5037, 'n': 10111, 'o': 11922, 'p': 3863, 'q': 99, 'r': 9461, 's': 9444, 't': 13744, 'u': 4027, 'v': 1486, 'w': 3194, 'x': 540, 'y': 2976, 'z': 203} -- components: Library (Lib) messages: 218848 nosy: cool-RR priority: normal severity: normal status: open title: pprint doesn't work well for counters, sometimes shows them like a dict versions: Python 3.4 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue21542] pprint doesn't work well for counters, sometimes shows them like a dict
Changes by Ned Deily n...@acm.org: -- nosy: +rhettinger ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue21542 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com