gpt4 book ai didi

python - 打印 collection.Counter 实例时出错

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:12 24 4
gpt4 key购买 nike

Counter 对象是 dict 的子类,因此它们具有 setdefault 方法。

>>> from collections import Counter
>>> c = Counter(houses=5)
>>> print(c.setdefault.__doc__)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

如果我这样做:

>>> c.setdefault('castles')
>>> c.keys()
dict_keys(['castles', 'houses'])
>>> type(c)
<class 'collections.Counter'>

一切看起来都很好。但是:

>>> c
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
c
File "C:\Python32\lib\collections.py", line 586, in __repr__
items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
File "C:\Python32\lib\collections.py", line 477, in most_common
return sorted(self.items(), key=_itemgetter(1), reverse=True)
TypeError: unorderable types: NoneType() < int()
>>>

这是一个错误吗?不应该给 c.setdefault('caSTLes') 一个值/键错误,而不是静静地接受一个没有值的键?或者考虑 None 值的 repr 方法?

最佳答案

是的,看起来像一个错误。问题是没有值参数的 setdefault 假定值为 None,而在 Counter 的情况下,它实际上应该插入一个或零,或者通过引发一些异常而失败。

在 Python 2.7 中,您的代码片段可以正常工作,顺便说一句,尽管它仍然插入一个 None 值,这违反了 Counter 的不变量。

请注意,这不是第一个 bug/design flaw我遇到 collections.Counter

关于python - 打印 collection.Counter 实例时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8022342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com