Myślę, że rozumowanie listowe może mi to dać, ale nie jestem pewien: jakiekolwiek eleganckie rozwiązania w Pythonie (2.6) w ogóle do wybierania unikalnych obiektów na liście i podawania liczby?Czy rozumienie list w Pythonie (najlepiej) jest równoważne z "count (*) ... group by ..." w SQL?
(Zdefiniowałem unikat w mojej definicji obiektu).
Więc w RDBMS-land, coś takiego:
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;
Co daje:
COUNT(*) n
==========
3 1
1 2
Więc oto mój odpowiednik lista w Pythonie:
[1,1,1,2]
I chcę taki sam wynik jak SQL SELECT daje powyżej.
EDIT: Przykład dałem tutaj została uproszczona, ja rzeczywiście przetwarzanie listy zdefiniowanych przez użytkownika obiektowe przypadkach: po prostu dla kompletności I obejmują dodatkowy kod, co potrzebne, aby cała sprawa do pracy:
import hashlib
def __hash__(self):
md5=hashlib.md5()
[md5.update(i) for i in self.my_list_of_stuff]
return int(md5.hexdigest(),16)
Potrzebna była metoda __hash__
, aby przekonwertować set
do pracy (wybrałem pomysł na zrozumienie listy, który działa w 2.6 [pomimo tego, że nauczyłem się, że wiąże się on z nieefektywnością (patrz komentarze) - mój zestaw danych jest wystarczająco mały bo to nie jest problem]). my_list_of_stuff
powyżej jest listą (ciągów znaków) w definicji mojego obiektu.
ładne ... okrzyki - działa dobrze na mojej instalacji 2.6. – monojohnny
Rozwiązanie defaultdict będzie o wiele lepsze na większych listach "wartości", ponieważ zapętla je tylko raz, zamiast raz i raz dla każdej unikalnej wartości. –
@Thomas: dzięki za dodanie tego. – bernie