Semi-Newbie needs a little help
Chris Rebert
clp2 at rebertia.com
Mon Jul 6 18:22:54 EDT 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