Skip to content

Instantly share code, notes, and snippets.

@shenwei356
Last active August 28, 2015 05:59
Show Gist options
  • Save shenwei356/4b061a89936a78085701 to your computer and use it in GitHub Desktop.
Save shenwei356/4b061a89936a78085701 to your computer and use it in GitHub Desktop.
sorting needed before groupby!!!!!!
#!/usr/bin/python
import re
from itertools import groupby
s = '11M1D31M1I3M1D48M2I1M1D28M'
g = re.findall('\d+[A-Z]', s) # ['11M', '1D', '31M', '1I', '3M', '1D', '48M', '2I', '1M', '1D', '28M']
kv = [[x[-1], int(x[0:-1])] for x in g] # [['M', 11], ['D', 1], ['M', 31], ['I', 1], ['M', 3], ['D', 1], ['M', 48], ['I', 2], ['M', 1], ['D', 1], ['M', 28]]
kv = sorted(kv, key=lambda e: e[0]) # fuck !! sorting needed!
stat = { k: sum((g[1] for g in group)) for k, group in groupby(kv, key=lambda e: e[0])}
print(stat) # {'M': 122, 'I': 3, 'D': 3}
# one line
stat = {k: sum((g[1] for g in group)) for k, group in groupby(sorted([[x[-1], int(x[0:-1])] for x in re.findall('\d+[A-Z]', '11M1D31M1I3M1D48M2I1M1D28M')], key=lambda e: e[0]), key=lambda e: e[0])}
print(stat) # {'M': 122, 'I': 3, 'D': 3}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment