# [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>

```