我认为列表推导可能会给我这个,但我不确定:Python(2.6)中的任何优雅解决方案通常用于选择列表中的唯一对象并提供计数?
(我已经定义了一个__eq__
来定义我的对象定义的唯一性)。
所以在 RDBMS-land 中,是这样的:
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;
这使:
COUNT(*) n
==========
3 1
1 2
所以,这是我在 Python 中的等效列表:
[1,1,1,2]
我想要与上面给出的 SQL SELECT 相同的输出。
编辑:我在这里给出的例子被简化了,我实际上正在处理用户定义的对象实例列表:为了完整起见,我包括了让整个事情正常工作所需的额外代码:
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 中有效的列表理解想法 [尽管我了解到这涉及效率低下(见评论)-我的数据集足够小而不是问题])。my_list_of_stuff
以上是我的对象定义中的(字符串)列表。