> Im trying to iterate through values in a dictionary so i can find the > closest value and then extract the key for that value....what ive done so far: > > def pcloop(dictionary, exvalue): > z = dictionary.itervalues() > y = z - exvalue > v = (y*y)**1/2 > if v < 0.001: > u = dictionary.get[z] > return u
I think I understand what you're trying to do...given a target value, find the key/value pair in your dictionary where your value is closest to the target...where "closest" is defined by absolute-value difference between the target and the value. Below I've included two such functions that do about the same thing (the difference being kind behavior in the first if the dataset is an empty dictionary, compared to just blowing up as the second one does). The first findClosest function is verbose, but helps you understand what it's doing. The second is, um, more succinct (read "deathly near opaque, and would probably get you shot for using it in a production environment"). Both return a tuple containing the key into the dataset and its associated value. -tkc def findClosest(dataset, target): closest_value = None closest_key = None closest_distance = None for k,v in dataset.items(): distance = (target - v) ** 2 if closest_value: if distance < closest_distance: closest_key = k closest_value = v closest_distance = distance else: closest_key = k closest_value = v closest_distance = distance return closest_key, closest_value def findClosest2(dataset, target): return reduce( lambda x,y: ((target - y[1]) ** 2 < (target - x[1]) ** 2) and y or x, dataset.items()) if __name__ == '__main__': sample_data = {'a':1, 'b':3, 'c':6} target = 4 print findClosest(sample_data, target) print findClosest2(sample_data, target) -- http://mail.python.org/mailman/listinfo/python-list