对象方法的Python字典理解

2024-03-29 00:19:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()'

当我使用此表单时:

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

我有一本字典,每一点都是独一无二的。为了得到字典,我需要写一个慢循环

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}

Tags: 方法fromimportidmapsourceget字典
2条回答

或者,使用这样的生成器表达式

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

get_point_source_id是类的方法,因此请改用^{}

from operator import methodcaller
map(methodcaller("get_point_source_id"), points)

EIDT公司:

我怎么知道我知道什么?

安装ipython,在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

相关问题 更多 >