# [CentralOH] DoJo Mumbilings for March 28, 2019

Thomas Winningham winningham at gmail.com
Thu Mar 28 17:41:36 EDT 2019

```1. Fixes row 9 to have category 2
2. Creates an EAV "facts" table, sort of like a graph
3. Assumes only one matching value, no aggregate sums, etc
4. Extendable to other similar problems, although report generation is
rather hard coded for this dataset

import uuid

fields = ['id','category','type','value']

data = [
[1,1,"A",2],
[2,3,"D",5],
[3,4,"B",7],
[4,2,"C",8],
[5,4,"D",9],
[6,4,"C",1],
[7,1,"D",3],
[8,3,"C",9],
[9,2,"A",5],
[10,3,"A",4],
[11,1,"B",6],
[12,4,"A",2],
[13,2,"D",6],
[14,3,"B",3],
[15,2,"B",8],
[16,1,"C",0]
]

# Create fact table

facts = []

for x in data:
this_fact=str(uuid.uuid1())
for f in range(len(fields)):
facts.append((this_fact, fields[f], x[f]))

# Create some query functions for EAV structure

E,A,V = 0,1,2

q_e4av = lambda a,v : [x[E] for x in facts if x[A]==a and x[V]==v]
q_v4a  = lambda a   : [x[V] for x in facts if x[A]==a]
q_v4ea = lambda e,a : [x[V] for x in facts if x[E]==e and x[A]==a]

# Generate report

uniq_cats = sorted(list(set(q_v4a('category'))))
uniq_typs = sorted(list(set(q_v4a('type'))))

result=[]
for c in uniq_cats:
row=[]
for t in uniq_typs:
cat_ids = set(q_e4av('category',c))
typ_ids = set(q_e4av('type',t))
result_entity = list(cat_ids & typ_ids)
if len(result_entity) > 0:
row.append(q_v4ea(result_entity,'value'))
else:
row.append(None)
result.append(row)

print('\t'+'\t'.join(uniq_typs))
for c in range(len(uniq_cats)):
print('\t'.join([str(uniq_cats[c])]+[repr(x) for x in result[c]]))

#-----------------------

\$ python3 test1.py

A       B       C       D
1       2       6       0       3
2       5       8       8       6
3       4       3       9       5
4       2       7       1       9

On Thu, Mar 28, 2019 at 3:53 PM Travis Risner <deeppunster at gmail.com> wrote:

> Hi folks,
>
> Here is a problem proposed by one of our own members.  (The problem is
> in the attached PDF.)
>
> Travis
>
> _______________________________________________
> CentralOH mailing list
> CentralOH at python.org
> https://mail.python.org/mailman/listinfo/centraloh
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/centraloh/attachments/20190328/e2abf45e/attachment.html>
```