Weird errors when trying to access a dictionary key

robinsiebler at gmail.com robinsiebler at gmail.com
Fri Jul 20 20:36:13 CEST 2007


I have a data structure that looks like this:

#    dates = {'2007': {'25': {'06/23/07': {'aerosmith': [{'sweet
emotion': 1}, {'dream on': 2}],
#                                          'Metallica': [{'Fade to
Black': 1}, {'Master of Puppets': 1}]},
#             'last_song': [Master of Puppets', 'Fade to Black',
'sweet emotion']}}}

I have a section where I try to loop through a set of dates and print
out all of the songs for a given artist:

    if type == 'artist':
        rpt_file.writelines('Song Summary for ' + artist + '\n\n')
        for year in sorted(rpt_dates):
            for week in sorted(rpt_dates[year]):
                for date in sorted(dates[year][week]):
                    if artist in dates[year][week][date]:
                        report.append(date)
                        for song in sorted(dates[year][week][date]
[artist]):
                            rpt_file.writelines('\t' + [song].keys() \
                                                + '\t' +
[song].values() + '\n')


I get the following error:

Traceback (most recent call last):
  File "C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp
\pythonlib\dbgp\client.py", line 1843, in runMain
    self.dbg.runfile(debug_args[0], debug_args)
  File "C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp
\pythonlib\dbgp\client.py", line 1538, in runfile
    h_execfile(file, args, module=main, tracer=self)
  File "C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp
\pythonlib\dbgp\client.py", line 596, in __init__
    execfile(file, globals, locals)
  File "C:\scripts\python\Songs\song_report.py", line 136, in <module>
    if __name__== '__main__': main()
  File "C:\scripts\python\Songs\song_report.py", line 134, in main
    print_rpt(options.type, rpt_dates, dates, args)
  File "C:\scripts\python\Songs\song_report.py", line 107, in
print_rpt
    + '\t' + [song].values() + '\n')
AttributeError: 'list' object has no attribute 'keys'

Here is where it gets weird:

type(song)
Traceback (most recent call last):
  File "C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp
\pythonlib\dbgp\client.py", line 3241, in runcode
    locals = self.frame.f_locals)
  File "C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp
\pythonlib\dbgp\client.py", line 1583, in runcode
    h_exec(code, globals=globals, locals=locals, module=module)
  File "C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp
\pythonlib\dbgp\client.py", line 520, in __init__
    exec code in globals, locals
  File "<console>", line 0, in <module>
TypeError: 'str' object is not callable
song
{"I Don't Wanna Stop": 1}
song.keys()
["I Don't Wanna Stop"]

For the complete script and data file, go to
http://members.dslextreme.com/users/robinsiebler/python/




More information about the Python-list mailing list