简体   繁体   中英

printing out dictionary values after filtering through it

I need to be able to print out the correct zipcodes that meet the thresh hold criteria, i can filter through them and operate on them, but the last step is to print which zipcodes are within 50miles of the center one. here is my code

import sys
import csv
import math


dicts = {}
origin =[]
#methods to convert to radians
def getLatRad(latitude):
    return float(latitude) * (math.pi/180.0)
def getLongRad(longitude):
    return float(longitude) * (math.pi/180.0)
#method to find which zipcodes are within thresh
def getnearbylist(center, thresh, ziplist):
    try:
        f = open("zips.csv")
        csvParser = csv.reader(f)
        for row in csvParser:
            zipcode= row[0].strip()
            latitude= row[2].replace('"', '').strip()
            longitude=row[3].replace('"', '').strip()
            dicts[zipcode] = {'zipcode':zipcode,'latitude': latitude, 'longitude':longitude}
        if center in dicts:
            origin=dicts[center]
            longRad2= getLongRad(origin['longitude'])
            latRad2= getLatRad(origin['latitude'])
        matched = {match: dicts[match] for match in ziplist if match in dicts}
        for x in matched:
            longRad1= getLongRad(matched[x]['longitude'])
            latRad1= getLatRad(matched[x]['latitude'])
            dlon = longRad2 - longRad1 
            dlat = latRad2 - latRad1
            a = math.sin(dlat/2)**2 + math.cos(latRad1) * math.cos(latRad2) * math.sin(dlon/2)**2
            c = 2 * math.asin(math.sqrt(a)) 
            m = 3960 * c
            if m <thresh: # cant figure out how to return zipcodes instead of m value
                print m

    except ValueError:
        pass
def main():
    center = '12601'  # Our center zipcode
    thresh = 50  # We are looking for zipcodes within 50 miles
    ziplist = ['12481', '10001', '12203', '10303', '12561'] # Our test list

    nearbylist = getnearbylist(center, thresh, ziplist) # Call the function
    print nearbylist

if __name__ == '__main__':
    main()

so instead of printing m, i want to return the zipcodes thanks!

You need to capture the zips found to be nearby.

#capture the nearby zips in a new dict
near_zips={}
for x in matched: 
    longRad1= getLongRad(matched[x]['longitude']) 
    latRad1= getLatRad(matched[x]['latitude']) 
    dlon = longRad2 - longRad1  
    dlat = latRad2 - latRad1 
    a = math.sin(dlat/2)**2 + math.cos(latRad1) * math.cos(latRad2) * math.sin(dlon/2)**2 
    c = 2 * math.asin(math.sqrt(a))  
    m = 3960 * c 
    if m <thresh: # cant figure out how to return zipcodes instead of m value 
        #add the nearby zipcodes to the dict
        print '%f < %f' % (m,thresh)
        print 'adding %s to near_zips' % (x,)
        near_zips[x] = matched[x]

#return the nearby zips
return near_zips        

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM