对象方法的Python字典理解

对象方法的Python字典理解,python,optimization,dictionary,error-handling,list-comprehension,Python,Optimization,Dictionary,Error Handling,List Comprehension,我需要找到一种方法来解决字典理解中的以下错误 from collections import Counter from operator import attrgetter consider points a list of object p = returns[0] p.class 2 Counter(map(attrgetter("class"), points)) Counter({1: 1314, 2: 1050}) p.get_point_source_id() 13612

我需要找到一种方法来解决字典理解中的以下错误

from collections import Counter
from operator import attrgetter

consider points a list of object 

p  = returns[0]
p.class
2

Counter(map(attrgetter("class"), points))
Counter({1: 1314, 2: 1050})

p.get_point_source_id()
13612
当我使用相同的方法时,我会收到此错误消息

Counter(map(attrgetter("get_point_source_id()"), points))

Traceback (most recent call last):
  File "<editor selection>", line 1, in <module>
AttributeError: 'Point' object has no attribute 'get_point_source_id()'
我有一本字典,每一点都是独一无二的。为了得到字典,我需要写一个慢循环

dict_point_source_id = dict()
for p in returns:
     dict_point_source_id[p.get_point_source_id()] = dict_point_source_id.get(p.get_point_source_id(), 0) + 1

print dict_point_source_id
{13612: 2364}

get\u point\u source\u id
是类的一种方法,因此请改用:

艾德: 我怎么知道我知道什么?

在ipython qtconsole中安装,使用
*
magics搜索与给定模式匹配的所有属性:

In [356]: import operator

In [357]: operator.*attr*?
operator.__delattr__
operator.__getattribute__
operator.__setattr__
operator.attrgetter

In [358]: operator.*meth*?
operator.methodcaller

或者,使用如下所示的生成器表达式

ct = Counter(pt.get_point_source_id() for pt in points)

谢谢张晓晨,但这是一个列表,而不是一个dictionary@Gianni,它只是一个片段,用
计数器(…
In [356]: import operator

In [357]: operator.*attr*?
operator.__delattr__
operator.__getattribute__
operator.__setattr__
operator.attrgetter

In [358]: operator.*meth*?
operator.methodcaller
ct = Counter(pt.get_point_source_id() for pt in points)