ttdinh
ttdinh

Reputation: 23

Python: for loop

I am trying to create a for loop to add values to keys in an established dictionary. However, I keep getting the last value instead of all of the values. What I am doing wrong?

My current dictionary looks like:

growth_dict = dict.fromkeys(conc[1:9], '')

growth_dict = {'100 ug/ml': '', '12.5 ug/ml': '', '50 ug/ml': '', 
    '0 ug/ml': '', '6.25 ug/ml': '', '25 ug/ml': '', '3.125 ug/ml': '', 
    '1.5625 ug/ml': ''}

cols_list = numpy.loadtxt(fn, skiprows=1, usecols=range(1,9), unpack=True)

numer = (0.301)*960 #numerator

for i in cols_list:

    N = i[-1]
    No = i[0]
    denom = (math.log(N/No)) #denominator
    g = numer/denom

When I run the program and type "growth_dict," it returns my dictionary with only the last value as the key:

growth_dict = {'100 ug/ml': 131.78785283808514, '12.5 ug/ml': 131.78785283808514, 
    '50 ug/ml': 131.78785283808514, '0 ug/ml': 131.78785283808514, 
    '6.25 ug/ml': 131.78785283808514, '25 ug/ml': 131.78785283808514, 
    '3.125 ug/ml': 131.78785283808514, '1.5625 ug/ml': 131.78785283808514}

Upvotes: 0

Views: 228

Answers (2)

Hugh Bothwell
Hugh Bothwell

Reputation: 56694

You could also save a lot of effort in loading your data by doing

cols_list = numpy.loadtxt(fn, skiprows=1, usecols=range(1,9), unpack=True)

Upvotes: 1

jedwards
jedwards

Reputation: 30250

You're overwriting the value of the conc[j] dictionary entry each time you do this:

growth_dict[conc[j]] = g

If you want each successive g to be appended to the dictionary entry, try something like:

for j in conc:
    # The first time each key is tested, an empty list will be created
    if not instanceof(growth_dict[conc[j]], list):
        growth_dict[conc[j]] = []
    growth_dict[conc[j]].append(g)

Upvotes: 1

Related Questions