['a', 'a', 'b', 'b', 'b']
,[('a', 2), ('b', 3)]
ich will Ich möchte nur zwei oder mehr von dort nehmen.
SQL scheint einfach zu sein. Ist es etwas, das mit Python allein nicht möglich ist?
Gemacht mit
[(g[0], len(list(g[1]))) for g in itertools.groupby(array.sort())]
Example
>>> import itertools
>>> array = ['a', 'a', 'b', 'b', 'b']
>>> uniq = [(g[0], len(list(g[1]))) for g in itertools.groupby(array.sort())]
>>> uniq
[('a', 2), ('b', 3)]
>>> tuples = [('aaa', 'bbb'), ('aaa', 'bbb'), ('aaa', 'vvv'), ('bbb', 'ccc'), ('bbb', 'ccc')]
>>> uniq = [(g[0], len(list(g[1]))) for g in itertools.groupby(tuples.sort())]
>>> uniq
[(('aaa', 'bbb'), 2), (('aaa', 'vvv'), 1), (('bbb', 'ccc'), 2)]
>>> filter(lambda f: f[1] > 1, uniq)
[(('aaa', 'bbb'), 2), (('bbb', 'ccc'), 2)]
Nur zwei oder mehr wurden herausgezogen.
http://stackoverflow.com/questions/2392929/how-to-get-unique-values-with-respective-occurance-count-from-a-list-in-python
Ich habe einen Kommentar zu einer nützlicheren Bibliothek erhalten.
>>> from collections import Counter
>>> tuples = [('aaa', 'bbb'), ('aaa', 'bbb'), ('aaa', 'vvv'), ('bbb', 'ccc'), ('bbb', 'ccc')]
>>> uniq = Counter(tuples)
>>> uniq
Counter({('aaa', 'bbb'): 2, ('bbb', 'ccc'): 2, ('aaa', 'vvv'): 1})
>>> filter(lambda f: f[1] > 1, uniq.items())
[(('aaa', 'bbb'), 2), (('bbb', 'ccc'), 2)]
collections.Verwenden wir Counter!!
# Referenz
http://docs.python.jp/2/library/collections.html
Recommended Posts