python - Converting a dictionary into a square matrix -
i wanting learn how convert dictionary square matrix. have read, may need convert numpy array , reshape it. not want use reshape want able based on information user puts in. in other words, want code give out square matrix no matter how many owners , breeds input user.
note: owners , breeds dictionary vary upon user input. user can input 100 names , 50 breeds, or can input 4 names , 5 breeds. in example, did 4 names , 3 dogs.
dict1 = {'bob vs sarah': {'shepherd': 1,'collie': 5,'poodle': 8}, 'bob vs ann': {'shepherd': 3,'collie': 2,'poodle': 1}, 'bob vs jen': {'shepherd': 3,'collie': 2,'poodle': 2}, 'sarah vs bob': {'shepherd': 3,'collie': 2,'poodle': 4}, 'sarah vs ann': {'shepherd': 4,'collie': 6,'poodle': 3}, 'sarah vs jen': {'shepherd': 1,'collie': 5,'poodle': 8}, 'jen vs bob': {'shepherd': 4,'collie': 8,'poodle': 1}, 'jen vs sarah': {'shepherd': 7,'collie': 9,'poodle': 2}, 'jen vs ann': {'shepherd': 3,'collie': 7,'poodle': 2}, 'ann vs bob': {'shepherd': 6,'collie': 2,'poodle': 5}, 'ann vs sarah': {'shepherd': 0,'collie': 2,'poodle': 4}, 'ann vs jen': {'shepherd': 2,'collie': 8,'poodle': 2}, 'bob vs bob': {'shepherd': 3,'collie': 2,'poodle': 2}, 'sarah vs sarah': {'shepherd': 3,'collie': 2,'poodle': 2}, 'ann vs ann': {'shepherd': 13,'collie': 2,'poodle': 4}, 'jen vs jen': {'shepherd': 9,'collie': 7,'poodle': 2}}
for example, want 4 x 4 matrix (again, user can input number of dog breeds 3 breeds not restriction), since there 4 owners.
i apologize ahead of time not putting in want end result , do. proud of myself making dict1 :). dictionary should in form similar below, not sure how incorporate different breeds. hard part me needing 1 matrix. plan on using matrix solver numpy has, hence why wanting figure out how square matrix dictionary.
bob sarah ann jen bob sarah ann jen
if can data in format
{name1: {name1:data, name2:data, name3:data, ...}, name2: {name1:data, name2:data, name3:data, ...}, ... }
then can hand pandas dataframe , make you. data @ position row = name1 , col = name2
value of name1 vs name2
. here code it:
from collections import defaultdict import pandas result = defaultdict(dict) key,value in dict1.items(): names = key.split() name1 = names[0] name2 = names[2] result[name1][name2] = value df = pandas.dataframe(result).transpose() print(df)
this gives following output:
ann bob jen sarah ann {'shepherd': 13, 'collie': 2, 'poodle': 4} {'shepherd': 6, 'collie': 2, 'poodle': 5} {'shepherd': 2, 'collie': 8, 'poodle': 2} {'shepherd': 0, 'collie': 2, 'poodle': 4} bob {'shepherd': 3, 'collie': 2, 'poodle': 1} {'shepherd': 3, 'collie': 2, 'poodle': 2} {'shepherd': 3, 'collie': 2, 'poodle': 2} {'shepherd': 1, 'collie': 5, 'poodle': 8} jen {'shepherd': 3, 'collie': 7, 'poodle': 2} {'shepherd': 4, 'collie': 8, 'poodle': 1} {'shepherd': 9, 'collie': 7, 'poodle': 2} {'shepherd': 7, 'collie': 9, 'poodle': 2} sarah {'shepherd': 4, 'collie': 6, 'poodle': 3} {'shepherd': 3, 'collie': 2, 'poodle': 4} {'shepherd': 1, 'collie': 5, 'poodle': 8} {'shepherd': 3, 'collie': 2, 'poodle': 2}
a simple conversion numpy array like:
numpy_array = df.as_matrix() print(numpy_array) [[{'shepherd': 13, 'collie': 2, 'poodle': 4} {'shepherd': 6, 'collie': 2, 'poodle': 5} {'shepherd': 2, 'collie': 8, 'poodle': 2} {'shepherd': 0, 'collie': 2, 'poodle': 4}] [{'shepherd': 3, 'collie': 2, 'poodle': 1} {'shepherd': 3, 'collie': 2, 'poodle': 2} {'shepherd': 3, 'collie': 2, 'poodle': 2} {'shepherd': 1, 'collie': 5, 'poodle': 8}] [{'shepherd': 3, 'collie': 7, 'poodle': 2} {'shepherd': 4, 'collie': 8, 'poodle': 1} {'shepherd': 9, 'collie': 7, 'poodle': 2} {'shepherd': 7, 'collie': 9, 'poodle': 2}] [{'shepherd': 4, 'collie': 6, 'poodle': 3} {'shepherd': 3, 'collie': 2, 'poodle': 4} {'shepherd': 1, 'collie': 5, 'poodle': 8} {'shepherd': 3, 'collie': 2, 'poodle': 2}]]
Comments
Post a Comment