[Tutor] Help with Data representations
Greg Whittier
greg at thewhittiers.com
Mon Mar 15 03:19:12 EST 2004
I'm kind of new to this, but I'll take a stab. My inclination would be
to use a dictionary with a tuple as the key. In other words,
m219a = [5,0,10,7] becomes m[(219,0)] = [5,0,10,7]
m219b = [5,0,10,7,2] becomes m[(219,1)] = [5,0,10,7,2]
Because it's keyed with a tuple you can sort on this. If I understand
the latter part of the question about the histogram, the following
should work
mvaldict = {}
for key, val in m.items():
mvaldict[tuple(val)] = \
mvaldict.setdefault(tuple(val),[]).append(key)
# print results
for key in mvaldict.keys()
print key, mvaldict[key], len(mvaldict[key])
Hope this helps,
Greg
On Sun, 2004-03-14 at 23:02, kevin parks wrote:
> hi all!
>
> I have some data that i want to get a handle on. My data is (so far) is
> formatted thusly:
>
> m219a = [5,0,10,7]
> m219b = [5,0,10,7,2]
> m221a = [5,6]
> m221b = [5,6,7]
> m222a = [0,10]
> m222b = [0,10,2]
> m223a = [2,8]
>
> The m291a is the variable name (but i am thinking that it also needs to
> be added to the list or the input list turned in to a dictionary?)....
> I am not sure what the best way is, but let me first explain what that
> data is.. the m291a refers to a point on my time line and the list
> contains the values for that item. Sometimes there are more actually a
> few items that go on that point on the timeline so that is why there is
> a 219a and 219b. The m is just to make it a legal variable name.
>
> So it turns out that i have several hundreds of these items, but only
> about 60 or so unique items. I am able to map, sort, and normalize my
> data and all the other massaging that i want to do and spit it all out.
> Now it turns out that what i really would find helpful is to find out
> where each item is in a sort of histogram so that i get a list of all
> my 60 or so unique items and each m000x number for where it appears and
> finally a tally for how often it appears in a kind of score board. So
> that i get something like:
>
> 1. [0,10,2] : m222b, m381, m129c : 3
> 2. [5,6,7] : m221b, m19a, m411b, m367b, m377a : 6
>
> with apologies to the list i will post a much abbreviated version of my
> script so that the tutors will better be able to understand my query..
>
> cheers,
> kevin
>
>
> -- snip ---
>
> #!/usr/bin/env python
>
> from normtest import *
> from interval import *
> from unique2 import unique
>
> def printout(seq):
> print '-' * 62
> print seq,"\t",step1(seq),"\t",
> (min(ordering(rotations(step1(seq))))[3]),"\t",
> optional(min(ordering(rotations(step1(seq))))[3])
>
>
> def test():
> m1 = [8, 3, 5, 4]
> m7 = [4, 3, 2, 2]
> m14 = [8, 3, 7, 5]
> m18 = [10, 2, 8, 7]
> m20 = [10, 0, 5, 7]
> m22 = [10, 2, 8, 7]
> m24 = [7, 9, 3, 8]
> m28 = [10, 0, 5, 7]
> m29 = [10, 11]
> m30 = [8, 3, 5, 4]
> m32 = [5, 0, 11, 7]
> m34 = [8, 3, 7, 9]
> m36a = [5, 4, 3, 1]
> m36b = [5, 4, 3, 1, 7]
> m37a = [0, 8, 2, 4, 9, 10, 1]
> m37b = [0, 8, 2, 4, 9, 10, 1, 6]
> m39a = [8, 10, 1, 9]
> m39b = [8, 10, 1, 9, 7]
> m41a = [2, 0, 3, 1]
> m41b = [2, 0, 3, 1, 6]
> page2 = [m1, m7, m14, m18, m20, m22, m24, m28, m29, m30, m32, m34,
> m36a, m36b, m37a, m37b, m39a, m39b, m41a, m41b]
> # ~~~~~~~~~~~~~~~~~~~~ page 3 ~~~~~~~~~~~~~~~~~~~~
> m43 = [3, 2, 4]
> m44a = [0, 8, 2, 4, 9, 10, 1]
> m44b = [0, 8, 2, 4, 9, 10, 1, 6]
> m45a = [5, 4, 3, 1]
> m45b = [5, 4, 3, 1, 7]
> m47a = [5,0,3,1]
> m47b = [5,4,3,1]
> m47c = [5,4,3,1,7]
> m49a = [8,10,1,9]
> m49b = [8,10,1,9,5]
> m51 = [5,0,3,1]
> m51b = [5,0,3,1,7]
> m53 = [8,3,7,9]
> m54a = [5,10,7,0]
> m54b = [5,10,7,0, 2]
> m55 = [0,8,2,4,9,10,1]
> m55b = [0,8,2,4,9,10,1,6]
> m57a = [5,0,3,1]
> m57b = [5,4,3,1]
> m59a = [5,4,3,1]
> m59b = [5,4,3,1,7]
> m61 = [2,4,3]
> m62a = [10,2,8,7]
> m62b = [10,2,8,7,0]
> m63 = [10,11]
> m64 = [8,5,7,10,2]
> m64b = [8,5,7,10,2, 9]
> m66 = [0,1,6]
> m68a = [5,0,3,1]
> m86b = [5,0,3,1,7]
> m70a = [8,9,10,1]
> m70b = [8,9,10,1,7]
> m71 = [2,4,11,10]
> m72 = [0,1,6,5]
> m74 = [8,2,5,4]
> m78 = [8,7,10,2]
> m80 = [11,8,6,1]
> m82a = [7,2,6,8]
> m82b = [10,9,0,11]
> m82c = [10,9,0,11,4]
> m84a = [10,8,2,7]
> m84b = [10,8,2,7,0,5]
> m85 = [0,1,6,5]
> page3 = [m43, m44a, m44b, m45a, m45b, m47a, m47b, m47c, m49a, m49b,
> m51, m51b, m53, m54a, m54b, m55, m55b, m57a, m57b, m59a, m59b, m61,
> m62a, m62b, m63, m64, m64b, m66, m68a, m86b, m70a, m70b, m71, m72, m74,
> m78, m80, m82a, m82b, m82c, m84a, m84b, m85]
> # -+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-
> all = page2+page3
> # tr = []
> outlist = []
> # first normalize and map everything and pack it in a list
> for j in all:
> if len(j) > 1:
> tr = optional(min(ordering(rotations(step1(j))))[3])
> outlist.append(tr)
> # now let's find all the unique items
> foo = unique(outlist)
> unique_item_count = 1
> # and then print them out (while counting how many there are)
> for item in foo:
> print unique_item_count, "\t",item
> unique_item_count = unique_item_count + 1
> pages = [page2, page3]
> pp = 0
> for page in pages:
> print '=' * 62
> print " --- Page ", pp+2, ": "
> print '=' * 62
> print "set\tmap & sort:\tnormalized:\tto zero:"
> pp = pp + 1
> # print page
> for item in page:
> printout(item)
>
> if __name__ == "__main__":
> test()
>
> # --
>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
--
Greg Whittier <greg at thewhittiers.com>
More information about the Tutor
mailing list