I have a dictionary in the form:
{"a": (1, 0.1), "b": (2, 0.2), ...}
Each tuple corresponds to (score, standard deviation).
How can I take the average of just the first integer in each tuple?
I’ve tried this:
for word in d:
(score, std) = d[word]
d[word]=float(score),float(std)
if word in string:
number = len(string)
v = sum(score)
return (v) / number
Get this error:
v = sum(score)
TypeError: 'int' object is not iterable
It’s easy to do using list comprehensions. First, you can get all the dictionary values from
d.values(). To make a list of just the first item in each value you make a list like[v[0] for v in d.values()]. Then, just take the sum of those elements, and divide by the number of items in the dictionary:As Pedro rightly points out, this actually creates the list, and then does the sum. If you have a huge dictionary, this might take up a bunch of memory and be inefficient, so you would want a generator expression instead of a list comprehension. In this case, that just means getting rid of one pair of brackets:
The two methods are compared in another question.