This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2014年05月20日 15:32 by cool-RR, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Messages (5) | |||
|---|---|---|---|
| msg218848 - (view) | Author: Ram Rachum (cool-RR) * | Date: 2014年05月20日 15:32 | |
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}
>>>
|
|||
| msg218872 - (view) | Author: Akira Li (akira) * | Date: 2014年05月21日 13:26 | |
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
|
|||
| msg218884 - (view) | Author: Raymond Hettinger (rhettinger) * (Python committer) | Date: 2014年05月21日 20:02 | |
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. |
|||
| msg218928 - (view) | Author: Ram Rachum (cool-RR) * | Date: 2014年05月22日 22:45 | |
Maybe though this item should result in at least a test case for the future `pprint` redesign? |
|||
| msg218934 - (view) | Author: Raymond Hettinger (rhettinger) * (Python committer) | Date: 2014年05月22日 23:14 | |
Please add a note to the other tracker item. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:03 | admin | set | github: 65741 |
| 2014年05月22日 23:14:02 | rhettinger | set | messages: + msg218934 |
| 2014年05月22日 22:45:59 | cool-RR | set | messages: + msg218928 |
| 2014年05月22日 22:44:39 | rhettinger | set | status: open -> closed superseder: general pprint rewrite resolution: duplicate |
| 2014年05月21日 20:02:45 | rhettinger | set | messages: + msg218884 |
| 2014年05月21日 13:26:40 | akira | set | nosy:
+ akira messages: + msg218872 |
| 2014年05月20日 20:08:13 | ned.deily | set | nosy:
+ rhettinger |
| 2014年05月20日 15:32:41 | cool-RR | create | |