On Sun, Aug 22, 2010 at 1:31 PM, Dirk Nachbar <dirk...@gmail.com> wrote:
> Here is a function which takes any list and creates a freq table, > which can be printed unsorted, sorted by cases or items. It's supposed > to mirror the proc freq in SAS. > > Dirk > > def freq(seq,order='unsorted',prin=True): > #order can be unsorted, cases, items > > freq={} > for s in seq: > if s in freq: > freq[s]+=1 > else: > freq[s]=1 > The above code can be replaced with this: freq = {} for s in seqn: freq[s] = freq.get(s,0) + 1 > if prin==True: > print 'Items=',len(seq),'Cases=',len(freq) > print '------------------------' > if order=='unsorted': > for k in freq.keys(): > print k,freq[k],float(freq[k])/len(seq) > elif order=='cases': > #http://blog.client9.com/2007/11/sorting-python-dict-by- > value.html > freq2=sorted(freq.iteritems(), key=lambda (k,v): > (v,k),reverse=True) > for f in freq2: > print f[0],f[1],float(f[1])/len(seq) > elif order=='items': > for k in sorted(freq.iterkeys()): > print k,freq[k],float(freq[k])/len(seq) > print '------------------------' > return freq > > #test > > import random > > rand=[] > for i in range(10000): > rand.append(str(int(100*random.random()))) > > fr=freq(rand) > fr2=freq(rand,order='items') > fr2=freq(rand,order='cases') > -- > I feel the code you wrote is bloated a bit. You shall definately give another try to improvise it. > http://mail.python.org/mailman/listinfo/python-list > -- ~l0nwlf
-- http://mail.python.org/mailman/listinfo/python-list