On 06/22/2016 04:46 PM, Jignesh Sutar wrote:
Say I have list of data as given in the example code below, I want to find
all the unique categories (alphabetic letters) and unique IDs (numbers) and
then produce a summary grid as manually entered in the "results". How could
I code this?

Many thanks in advance,
Jignesh


data= ["A.1", "A.2", "A.3", "B.1", "C.2", "C.3",  "D.4", "E.5", "E.6"]

cols=[]
rows=[]
for item in data:
     i=item.split(".")
     if i[0] not in cols: cols.append(i[0])
     if i[1] not in rows: rows.append(i[1])

print cols
print rows

results=
[["Row/Col", "A", "B", "C", "D", "E"],
[1, 1, 1, 0, 0, 0],
[2, 1, 0, 1, 0, 0],
[3, 1, 0, 1, 0, 0],
[4, 0, 0, 0, 1, 0],
[5, 0, 0, 0, 0, 1],
[6, 0, 0, 0, 0, 1]]


Easily done using only builtins and list comprehension:

data= ["A.1", "A.2", "A.3", "B.1", "C.2", "C.3",  "D.4", "E.5", "E.6"]
# python magic with the "zip" function
# "set" will take care of removing duplicates
categories, ids = map(set, zip(*[d.split('.') for d in data]))

results = []
for id_ in sorted(map(int,ids)):
results.append([data.count("%s.%d" % (cat, id_)) for cat in sorted(categories)])

print results



If you don't really understand the zip function:
http://nedbatchelder.com/text/iter.html
The whole presentation is worth reading.

Cheers,

Jm

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to