On Saturday, August 29, 2015 at 10:50:18 PM UTC-4, MRAB wrote:
> On 2015-08-30 03:05, kbtyo wrote:
> > I am using Jupyter Notebook and Python 3.4. I have a data structure in the 
> > format, (type list):
> >
> > [{'AccountNumber': N,
> > 'Amount': '0',
> >   'Answer': '12:00:00 PM',
> >    'ID': None,
> >    'Type': 'WriteLetters',
> >    'Amount': '10',
> >    {'AccountNumber': Y,
> >        'Amount': '0',
> >        'Answer': ' 12:00:00 PM',
> >         'ID': None,
> >        'Type': 'Transfer',
> >        'Amount': '2'}]
> >
> > The end goal is to write this out to CSV.
> >
> > For the above example the output would look like:
> >
> > AccountNumber, Amount, Answer, ID, Type, Amount
> > N,0,12:00:00 PM,None,WriteLetters,10
> > Y,2,12:00:00 PM,None,Transfer,2
> >
> > Below is the function that I am using to write out this data structure. 
> > Please excuse any indentation formatting issues. The data structure is 
> > returned through the function "construct_results(get_just_xml_data)".
> >
> > The data that is returned is in the format as above. 
> > "construct_headers(get_just_xml_data)" returns a list of headers. Writing 
> > out the row for "headers_list" works.
> >
> > The list comprehension "data" is to maintain the integrity of the column 
> > headers and the values for each new instance of the data structure (where 
> > the keys in the dictionary are the headers and values - row instances). The 
> > keys in this specific data structure are meant to check if there is a value 
> > instance, and if there is not - place an ''.
> >
> > def write_to_csv(results, headers):
> >
> >      headers = construct_headers(get_just_xml_data)
> >      results = construct_results(get_just_xml_data)
> >      headers_list = list(headers)
> >
> >      with open('real_csv_output.csv', 'wt') as f:
> >          writer = csv.writer(f)
> >          writer.writerow(headers_list)
> >          for row in results:
> >              data = [row.get(index, '') for index in results]
> >          writer.writerow(data)
> >
> >
> >
> > However, when I run this, I receive this error:
> >
> > ---------------------------------------------------------------------------
> > TypeError                                 Traceback (most recent call last)
> > <ipython-input-747-7746797fc9a5> in <module>()
> > ----> 1 write_to_csv(results, headers)
> >
> > <ipython-input-746-c822437eeaf0> in write_to_csv(results, headers)
> >        9         writer.writerow(headers_list)
> >       10         for item in results:
> > ---> 11             data = [item.get(index, '') for index in results]
> >       12         writer.writerow(data)
> >
> > <ipython-input-746-c822437eeaf0> in <listcomp>(.0)
> >        9         writer.writerow(headers_list)
> >       10         for item in results:
> > ---> 11             data = [item.get(index, '') for index in results]
> >       12         writer.writerow(data)
> >
> > TypeError: unhashable type: 'dict'
> >
> >
> > I have done some research, namely, the following:
> >
> > https://mail.python.org/pipermail//tutor/2011-November/086761.html
> >
> > http://stackoverflow.com/questions/27435798/unhashable-type-dict-type-error
> >
> > http://stackoverflow.com/questions/1957396/why-dict-objects-are-unhashable-in-python
> >
> > However, I am still perplexed by this error. Any feedback is welcomed. 
> > Thank you.
> >
> You're taking the index values from 'results' instead of 'headers'.

Would you be able to elaborate on this? I partially understand what you mean. 
However, each dictionary (of results) has the same keys to map to (aka, headers 
when written out to CSV). I am wondering if you would be able to explain how 
the index is being used in this case?
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to