import urllib2 import xmltodict from string import split from secrets import wolfram_key states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington State', 'West Virginia', 'Wisconsin', 'Wyoming', 'Washington DC'] def query(q, key=wolfram_key): return urllib2.urlopen('http://api.wolframalpha.com/v2/query?appid=%s&input=%s&format=plaintext' % (key,urllib2.quote(q))).read() def state_query(group_name, states=states): results = {s: xmltodict.parse(query('number of %s in %s?' % (group_name, s))) for s in states} results = {s: [p for p in v['queryresult']['pod'] if p['@title'] == 'Result'][0]['subpod']['plaintext'] for s,v in results.items()} results = {s: float(split(v)[0])*(1000000 if 'million' in v else 1) for s,v in results.items()} return results adults = state_query('adults') for group in ['phds', 'college graduates']: group_data = state_query(group) print '-'*100 print group print '\n'.join('#%d: %s: %2.2f%%' % (i+1,r[0],r[1]) for i,r in enumerate(sorted({s: (group_data[s]/adults[s])*100 for s in states}.items(), key = lambda x: x[1], reverse=True)))