我认为列表理解可能会给我这样的结果,但我不确定:在Python(2.6)中,有没有任何优雅的解决方案可以在列表中选择唯一的对象并提供计数?在
(我定义了一个__eq__
来定义对象定义的唯一性)。在
因此,在RDBMS领域,类似于:
CREATE TABLE x(n NUMBER(1));
INSERT INTO x VALUES(1);
INSERT INTO x VALUES(1);
INSERT INTO x VALUES(1);
INSERT INTO x VALUES(2);
SELECT COUNT(*), n FROM x
GROUP BY n;
它给出了:
^{pr2}$下面是我在Python中的等效列表:
[1,1,1,2]
我想要与上面的sqlselect相同的输出。在
编辑:我在这里给出的例子是简化的,我实际上在处理用户定义对象实例的列表:为了完整起见,我添加了使整个过程正常工作所需的额外代码:
import hashlib
def __hash__(self):
md5=hashlib.md5()
[md5.update(i) for i in self.my_list_of_stuff]
return int(md5.hexdigest(),16)
为了使__hash__
转换生效,需要使用set
方法(我选择了在2.6中有效的列表理解思想[尽管我了解到这涉及到一个低效率(见注释)-我的数据集足够小,所以这不是问题])。^上面的{
Lennart Regebro provided a nice one-liner执行您想要的操作:
As S.Lott mentions,defaultdict可以做同样的事情。在
Counter仅在py3.1中可用,继承自
dict
。在作为一个列表理解并不容易。在
这是一个非常Python式的解决方案。但不是清单理解。在
相关问题 更多 >
编程相关推荐