Semi-Newbie needs a little help

Chris Rebert clp2 at rebertia.com
Tue Jul 7 00:22:54 CEST 2009


On Mon, Jul 6, 2009 at 3:02 PM, Nile<nile_mcadams at yahoo.com> wrote:
> I am trying to write a simple little program to do some elementary
> stock market analysis.  I read lines, send each line to a function and
> then the function returns a date which serves as a key to a
> dictionary. Each time a date is returned I want to increment the value
> associated with that date. The function seems to be working properly.
> By means of a print statement I have inserted just before the return
> value I can see there are three dates that are returned which is
> correct.  The dictionary only seems to capture the last date. My test
> data consists of five stocks, each stock with five days. The correct
> answer would be a count of 5 for the second day, the third day, and
> the last day -- 11/14/2008.
>
> Here is the a code, followed by a portion of the output.  I know
> enough to write simple little programs like this with no problems up
> until now but I don't know enough to figure out what I am doing
> wrong.

>    for x in range(len(file_list)):

for filename in file_list:
#I'm assuming the lack of indentation on the subsequent lines is a
mere transcription error...

>    d = open(file_list[x] , "r")

    d = open(filename , "r")

>    data = d.readlines()
>    k = above_or_below(data)                                # This
> function seems to work correctly
>    print "here is the value that was returned " , k
>    dict[k] = dict.get(k,0) + 1

`dict` is the name of a builtin type. Please rename this variable to
avoid shadowing the type.
Also, where is this variable even initialized? It's not in this code
snippet you gave.
Further, I would recommend using a defaultdict
(http://docs.python.org/dev/library/collections.html#collections.defaultdict)
rather than a regular dictionary; this would make the
count-incrementing part nicer.

Taking these changes into account, your code becomes:

from collections import defaultdict

counts = defaultdict(lambda: 0)

for filename in file_list:
    d = open(filename , "r")
    data = d.readlines()
    k = above_or_below(data) # This function seems to work correctly
    print "here is the value that was returned " , k
    counts[k] += 1

    values = counts.values()
    print "here is a list of the dictionary values ", values
    print "the length of the dictionary is ", len(counts)


I don't immediately see what's causing your problem, but guess that it
might've be related to the initialization of the `dict` variable.

Cheers,
Chris
-- 
http://blog.rebertia.com



More information about the Python-list mailing list