Lab 17: Dictionaries and JSON Files¶

In this lab, you are going to practice using dictioniaries, and working with dictionary data read from a JSON file.

Practice some of the basic operations on a dictionary. Here's a start - try these:

my_contacts = {} #create an empty dictionary
my_contacts["Eric"] = "271-2177" #adds Eric's office number to the contacts dictionary
print( my_contacts )
print( "Eric" in my_contacts ) #checks if Eric is in the dictionary
my_contacts.pop("Eric") #removes entry with key "Eric" from the dictionary
print( "Eric" in my_contacts ) #checks if Eric is in the dictionary
{'Eric': '271-2177'}
True
False

Exercise 1: Add some names and phone numbers you know to the my_contacts dictionary. As in the lecture, practice adding new entries, testing for membership, deleting entries, and looping through and printing out all the entries.

Exercise 2: One thing we saw about assigning values to keys in dictionaries is that it works the same way whether or not there is already a key-value pair with that key. That might not always be the desired behavior. Write a program that will ask the user to enter a new entry for their contacts. If they give a name that's already in their contacts, ask if they want to overwrite that value before really changing it. Here is how it might look (though you don't have to submit this, so it's ok if it doesn't match exactly).

Exercise 3: Consider this example from the lecture where we calculated the population of Iowa given the numbers reported in the zipcodes file.

total_pop = 0
    
for z in zips_data:
    
    if zips_data[z]["state"] == "IA":
        total_pop += zips_data[z]["pop"]
        
print("Total population of Iowa is",total_pop)

Download the zipcodes.json file and create a new Python file called zipcode_analysis.py. Write the above code as a function called state_population() that allows us to pass the dictionary and a state as a parameter, and then return the population for that state. You could test it with code like this, and it would print out the numbers 2776420 and 29754890.

import json
        
with open("zipcodes.json") as zipsfile:
    zips_data = json.load(zipsfile)
    
print( state_population(zips_data,"IA") )
print( state_population(zips_data,"CA") )

Challenge Exercise 4: Write a function called city_populations_in_state() which is similar to the above, but instead of returning the population of the whole state, return a dictionary containing the population of each city in that state as city-population key-value pairs. You can test it as shown below. The output will initially be shown in the "squeezed" format in Thonny, though it shouldn't be too big for you to click to have it display the whole resulting dictionary. Be careful - some cities have only one zipcode, but some have many, and you will need to handle this possibility.

When you are finished, submit your file named zipcode_analysis.py with the function named city_populations_in_state() to codePost for the City populations dictionary assignment. This function will be unit-tested, and it will test to make sure you're getting the right answer for a few specific cities. The zipcodes.json file will already be uploaded for you, so you don't need to upload it with your submission.

Hints:

  • Your loop should be set up similar to Exercise 3, though instead of having a single accumulator variable, you will create an empty dictionary of city populations like city_populations = {}.
  • Inside your if statement, you will need to look at the name of the city for the current entry - let's say it is "DES MOINES". You need to check if "DES MOINES" is already a key in city_populations. If it is not, this is the first zip code you found for "DES MOINES", so initialize this key in city_populations to the population of the current entry. Otherwise, if it is already a key in city_populations, add on the population of the current entry to whatever value is already there.
  • This may be one of those problems where it might be tough to think of how to do it, but once you see the solution, you realize it is easier than you thought.

The full returned dictionary for Iowa would be

{'ACKWORTH': 491, 'ADAIR': 1748, 'ADEL': 4884, 'ALBION': 773, 'ALDEN': 1374, 'ALLEMAN': 449, 'ALLERTON': 805, 'ALTOONA': 7546, 'AMES': 52105, 'ANITA': 1529, 'ANKENY': 20465, 'ATLANTIC': 8468, 'AUDUBON': 4034, 'BAGLEY': 568, 'BARNES CITY': 355, 'BAXTER': 1381, 'BAYARD': 971, 'BEACONSFIELD': 195, 'BEAVER': 501, 'BEVINGTON': 273, 'BLAIRSBURG': 458, 'BONDURANT': 2666, 'BOONE': 14773, 'BOONEVILLE': 100, 'BOUTON': 552, 'BOXHOLM': 437, 'BRADFORD': 406, 'BRAYTON': 416, 'BUSSEY': 707, 'CAMBRIDGE': 1103, 'CARLISLE': 5109, 'CASEY': 1822, 'CHARITON': 6836, 'CHURDAN': 797, 'CLEMONS': 557, 'CLIO': 125, 'COLFAX': 3475, 'COLLINS': 764, 'COLO': 1293, 'COLUMBIA': 304, 'COON RAPIDS': 1802, 'COOPER': 170, 'SEWAL': 2617, 'CUMMING': 635, 'DALLAS': 996, 'DALLAS CENTER': 1838, 'DANA': 131, 'PLEASANTON': 762, 'DAWSON': 434, 'DECATUR': 394, 'DERBY': 339, 'DE SOTO': 1535, 'DEXTER': 824, 'DOWS': 1373, 'EARLHAM': 2010, 'ELKHART': 1374, 'ELLSTON': 286, 'ELLSWORTH': 1129, 'EXIRA': 1590, 'GALT': 57, 'GARDEN CITY': 422, 'GARDEN GROVE': 603, 'GIBSON': 458, 'GILMAN': 1221, 'GRAND JUNCTION': 1055, 'GRAND RIVER': 454, 'GRANGER': 1324, 'GRAY': 344, 'GRIMES': 4205, 'GRINNELL': 11530, 'GUTHRIE CENTER': 3398, 'HAMILTON': 314, 'HAMLIN': 336, 'HARTFORD': 1201, 'HARVEY': 683, 'HAVERHILL': 419, 'HUBBARD': 1356, 'HUMESTON': 981, 'HUXLEY': 2417, 'SPRING HILL': 13920, 'IOWA FALLS': 7714, 'IRA': 378, 'JAMAICA': 423, 'JEFFERSON': 5663, 'JEWELL': 1348, 'JOHNSTON': 4945, 'KAMRAR': 246, 'KELLERTON': 601, 'KELLEY': 314, 'KELLOGG': 913, 'KESWICK': 497, 'KNOXVILLE': 11205, 'LACONA': 700, 'LAMONI': 2638, 'LAUREL': 457, 'LEIGHTON': 594, 'LEON': 2556, 'LIBERTY CENTER': 468, 'LINDEN': 585, 'LINEVILLE': 586, 'LISCOMB': 512, 'LORIMOR': 619, 'LOVILIA': 1053, 'LUCAS': 617, 'LUTHER': 529, 'LYNNVILLE': 630, 'MC CALLSBURG': 533, 'MACKSBURG': 310, 'MADRID': 4367, 'MALCOM': 1595, 'MARSHALLTOWN': 30857, 'MAXWELL': 1268, 'MELBOURNE': 970, 'MELCHER-DALLAS': 924, 'MENLO': 650, 'MILLERTON': 258, 'MILO': 1705, 'MINBURN': 517, 'MINGO': 725, 'MITCHELLVILLE': 2363, 'MONROE': 2868, 'MONTEZUMA': 3570, 'GUERNSEY': 128, 'MONTOUR': 1137, 'MURRAY': 1357, 'NEVADA': 7381, 'NEW PROVIDENCE': 445, 'NEW SHARON': 2426, 'NEWTON': 19721, 'NEW VIRGINIA': 1593, 'NORWALK': 9512, 'OGDEN': 3115, 'OSCEOLA': 5528, 'OTLEY': 676, 'PANORA': 1847, 'PATON': 621, 'PATTERSON': 258, 'PELLA': 10771, 'PERRY': 7918, 'PERU': 442, 'PILOT MOUND': 380, 'PLEASANTVILLE': 2474, 'POLK CITY': 4203, 'POPEJOY': 298, 'PRAIRIE CITY': 1941, 'PROLE': 1488, 'RADCLIFFE': 804, 'RANDALL': 508, 'REASNOR': 245, 'REDFIELD': 1236, 'RHODES': 564, 'RIPPEY': 563, 'ROLAND': 1452, 'RUNNELLS': 2309, 'RUSSELL': 1018, 'SAINT ANTHONY': 328, 'SAINT CHARLES': 1169, 'SAINT MARYS': 632, 'SEARSBORO': 464, 'SLATER': 2083, 'STANHOPE': 1001, 'STATE CENTER': 1618, 'STORY CITY': 3501, 'STRATFORD': 1215, 'STUART': 1463, 'SULLY': 1096, 'SWAN': 691, 'THAYER': 453, 'TRACY': 256, 'TRURO': 767, 'UNION': 937, 'VAN METER': 1780, 'VAN WERT': 431, 'WAUKEE': 4933, 'WELDON': 388, 'WEST DES MOINES': 31896, 'WHAT CHEER': 1108, 'WILLIAMS': 1036, 'WILLIAMSON': 505, 'WINTERSET': 7254, 'WIOTA': 596, 'WOODBURN': 677, 'WOODWARD': 1749, 'YALE': 414, 'ZEARING': 1032, 'DES MOINES': 148155, 'WINDSOR HEIGHTS': 19816, 'PLEASANT HILL': 39883, 'URBANDALE': 28512, 'CLIVE': 7293, 'MASON CITY': 31168, 'ALEXANDER': 664, 'BELMOND': 3306, 'BRITT': 3988, 'BUFFALO CENTER': 1566, 'CLEAR LAKE': 10056, 'CORWITH': 737, 'CRYSTAL LAKE': 543, 'DOUGHERTY': 308, 'FERTILE': 766, 'FLOYD': 1273, 'FOREST CITY': 6010, 'GARNER': 3756, 'GOODELL': 452, 'GRAFTON': 630, 'HAMPTON': 5313, 'HANLONTOWN': 605, 'JOICE': 522, 'KANAWHA': 1181, 'KENSETT': 729, 'KLEMME': 849, 'LAKE MILLS': 2801, 'LAKOTA': 789, 'LATIMER': 966, 'LELAND': 333, 'LITTLE CEDAR': 248, 'MC INTIRE': 382, 'MANLY': 1757, 'MESERVEY': 298, 'NORA SPRINGS': 1849, 'NORTHWOOD': 2982, 'ORCHARD': 442, 'OSAGE': 5790, 'PLYMOUTH': 453, 'RAKE': 435, 'RICEVILLE': 1546, 'ROCK FALLS': 306, 'ROCKFORD': 1258, 'ROCKWELL': 2009, 'ROWAN': 405, 'RUDD': 688, 'SAINT ANSGAR': 2401, 'SCARVILLE': 420, 'SHEFFIELD': 1988, 'STACYVILLE': 798, 'SWALEDALE': 414, 'THOMPSON': 1178, 'THORNTON': 905, 'TITONKA': 1159, 'VENTURA': 816, 'WESLEY': 647, 'WODEN': 511, 'FORT DODGE': 27632, 'ALBERT CITY': 1293, 'ALGONA': 7829, 'ARMSTRONG': 1464, 'AYRSHIRE': 413, 'BADGER': 1270, 'BANCROFT': 1346, 'BARNUM': 481, 'BODE': 555, 'BRADGATE': 359, 'BURNSIDE': 355, 'BURT': 1069, 'CALLENDER': 1009, 'CLARE': 821, 'CLARION': 3849, 'CURLEW': 278, 'CYLINDER': 536, 'DAYTON': 1366, 'DOLLIVER': 260, 'DUNCOMBE': 1561, 'EAGLE GROVE': 4109, 'EARLY': 1195, 'EMMETSBURG': 4794, 'FARNHAMVILLE': 631, 'FENTON': 779, 'FONDA': 1438, 'GILMORE CITY': 604, 'GOLDFIELD': 1148, 'GOWRIE': 1225, 'HARCOURT': 631, 'HARDY': 262, 'HAVELOCK': 586, 'HUMBOLDT': 6493, 'JOLLEY': 296, 'KNIERIM': 295, 'KNOKE': 192, 'LAURENS': 2055, 'LEDYARD': 384, 'LEHIGH': 821, 'LIVERMORE': 645, 'LONE ROCK': 560, 'LU VERNE': 1337, 'LYTTON': 235, 'MALLARD': 721, 'MANSON': 2131, 'MARATHON': 564, 'MOORLAND': 541, 'NEMAHA': 356, 'NEWELL': 1668, 'OTHO': 1910, 'OTTOSEN': 301, 'PALMER': 1119, 'PLOVER': 275, 'POCAHONTAS': 2802, 'POMEROY': 1197, 'REMBRANDT': 236, 'RENWICK': 545, 'RINGSTED': 860, 'ROCKWELL CITY': 2952, 'RODMAN': 286, 'ROLFE': 1250, 'RUTLAND': 529, 'SAC CITY': 3531, 'SIOUX RAPIDS': 1542, 'SOMERS': 425, 'STORM LAKE': 11663, 'SWEA CITY': 1440, 'THOR': 463, 'VINCENT': 719, 'WEBSTER CITY': 9130, 'WEST BEND': 1099, 'WHITTEMORE': 1252, 'WOOLSTOCK': 394, 'ACKLEY': 2316, 'ALLISON': 1458, 'ALTA VISTA': 1356, 'APLINGTON': 1436, 'AREDALE': 317, 'ARLINGTON': 1124, 'AURORA': 344, 'AUSTINVILLE': 363, 'BEAMAN': 395, 'BRISTOW': 465, 'BUCKINGHAM': 694, 'CEDAR FALLS': 36084, 'CHARLES CITY': 10110, 'CLARKSVILLE': 2757, 'CONRAD': 1346, 'DENVER': 2543, 'DIKE': 1860, 'DUMONT': 1302, 'DUNKERTON': 1676, 'ELDORA': 3689, 'ELMA': 2102, 'FAIRBANK': 1770, 'FREDERICKSBURG': 1830, 'GARWIN': 869, 'GENEVA': 382, 'GLADBROOK': 1268, 'GREENE': 2480, 'GRUNDY CENTER': 4130, 'HANSELL': 362, 'HAZLETON': 1480, 'HOLLAND': 222, 'HUDSON': 2641, 'INDEPENDENCE': 8466, 'IONIA': 869, 'JANESVILLE': 2008, 'JESUP': 3505, 'KESLEY': 301, 'LAMONT': 830, 'LA PORTE CITY': 3990, 'LINCOLN': 433, 'MARBLE ROCK': 940, 'MASONVILLE': 557, 'MAYNARD': 899, 'NASHUA': 2007, 'NEW HAMPTON': 5783, 'NEW HARTFORD': 1362, 'OELWEIN': 8426, 'PARKERSBURG': 3544, 'PLAINFIELD': 1030, 'RAYMOND': 367, 'READLYN': 1858, 'REINBECK': 2099, 'SHELL ROCK': 1834, 'STANLEY': 175, 'STEAMBOAT ROCK': 650, 'SUMNER': 3187, 'TRAER': 2064, 'TRIPOLI': 1993, 'BREMER': 10879, 'WELLSBURG': 1353, 'WESTGATE': 1044, 'WINTHROP': 1330, 'WATERLOO': 69389, 'WASHBURN': 1010, 'EVANSDALE': 7954, 'NEVINVILLE': 9548, 'AFTON': 1450, 'BEDFORD': 2608, 'BENTON': 203, 'BLOCKTON': 476, 'BRIDGEWATER': 1383, 'CLEARFIELD': 593, 'CORNING': 2660, 'CUMBERLAND': 695, 'DELPHOS': 100, 'DIAGONAL': 793, 'FONTANELLE': 1534, 'GRANT': 315, 'GRAVITY': 617, 'GREENFIELD': 2772, 'KENT': 309, 'LENOX': 1973, 'MALOY': 81, 'MASSENA': 794, 'MOUNT AYR': 2487, 'NODAWAY': 706, 'ORIENT': 1042, 'PRESCOTT': 205, 'REDDING': 327, 'SHANNON CITY': 586, 'SHARPSBURG': 199, 'TINGLEY': 347, 'VILLISCA': 1794, 'AKRON': 2068, 'ALTA': 2757, 'ALTON': 1371, 'ANTHON': 1550, 'AURELIA': 1543, 'BATTLE CREEK': 1552, 'BRONSON': 796, 'CALUMET': 431, 'CASTANA': 533, 'CHEROKEE': 8339, 'CLEGHORN': 541, 'CORRECTIONVILLE': 1432, 'CUSHING': 261, 'DANBURY': 906, 'GALVA': 626, 'GRANVILLE': 592, 'HAWARDEN': 3097, 'HINTON': 2449, 'HOLSTEIN': 1977, 'HORNICK': 894, 'IRETON': 1154, 'KINGSLEY': 2138, 'LARRABEE': 607, 'LAWTON': 1481, 'LE MARS': 11576, 'LINN GROVE': 722, 'MAPLETON': 2038, 'MARCUS': 1654, 'MAURICE': 625, 'MERIDEN': 333, 'MERRILL': 1468, 'MOVILLE': 2064, 'ONAWA': 3867, 'ORANGE CITY': 6126, 'OTO': 340, 'PAULLINA': 1760, 'PETERSON': 640, 'PIERSON': 642, 'QUIMBY': 562, 'REMSEN': 2254, 'RODNEY': 120, 'SALIX': 1210, 'SCHALLER': 1311, 'SERGEANT BLUFF': 2853, 'SLOAN': 1303, 'SMITHLAND': 495, 'SUTHERLAND': 1096, 'TURIN': 387, 'UTE': 567, 'WASHTA': 519, 'WESTFIELD': 1435, 'WHITING': 895, 'SIOUX CITY': 82049, 'SHELDON': 5585, 'ALVORD': 494, 'ARCHER': 194, 'ASHTON': 1090, 'BOYDEN': 1652, 'DOON': 957, 'GEORGE': 2326, 'HOSPERS': 1491, 'HULL': 2283, 'INWOOD': 1434, 'LARCHWOOD': 2097, 'LITTLE ROCK': 688, 'PRIMGHAR': 2167, 'ROCK RAPIDS': 3956, 'ROCK VALLEY': 4100, 'SANBORN': 1632, 'SIBLEY': 3853, 'SIOUX CENTER': 7417, 'SPENCER': 12101, 'ARNOLDS PARK': 1109, 'DICKENS': 732, 'ESTHERVILLE': 8614, 'EVERLY': 1153, 'FOSTORIA': 471, 'GRAETTINGER': 1259, 'GREENVILLE': 630, 'HARRIS': 333, 'HARTLEY': 2574, 'LAKE PARK': 1320, 'MELVIN': 395, 'MILFORD': 2964, 'OCHEYEDAN': 1596, 'OKOBOJI': 1637, 'ROYAL': 1035, 'RUTHVEN': 1283, 'SPIRIT LAKE': 6683, 'SUPERIOR': 333, 'TERRIL': 863, 'WALLINGFORD': 371, 'WEBB': 343, 'CARROLL': 11456, 'ARCADIA': 1183, 'ARTHUR': 577, 'ASPINWALL': 367, 'YETTER': 882, 'BREDA': 773, 'CHARTER OAK': 797, 'DEDHAM': 562, 'DELOIT': 618, 'DENISON': 8507, 'GLIDDEN': 1518, 'HALBUR': 720, 'IDA GROVE': 3633, 'IRWIN': 1120, 'KIRKMAN': 395, 'KIRON': 753, 'LAKE CITY': 2539, 'LAKE VIEW': 1792, 'LANESBORO': 396, 'LIDDERDALE': 525, 'LOHRVILLE': 615, 'MANILLA': 1185, 'MANNING': 1807, 'ODEBOLT': 1776, 'RALSTON': 231, 'RICKETTS': 346, 'SCHLESWIG': 1191, 'SCRANTON': 814, 'TEMPLETON': 681, 'VAIL': 790, 'WALL LAKE': 1481, 'WESTSIDE': 714, 'MANAWA': 31614, 'COUNCIL BLUFFS': 30513, 'CARTER LAKE': 3200, 'ARION': 194, 'AVOCA': 2032, 'BLENCOE': 373, 'CARSON': 1398, 'CRESCENT': 1967, 'EARLING': 3279, 'DOW CITY': 1313, 'ELK HORN': 990, 'ELLIOTT': 879, 'EMERSON': 1529, 'GLENWOOD': 6392, 'GRISWOLD': 1678, 'HANCOCK': 427, 'HARLAN': 6934, 'HASTINGS': 267, 'HENDERSON': 564, 'HONEY CREEK': 656, 'KIMBALLTON': 614, 'LEWIS': 980, 'LITTLE SIOUX': 402, 'LOGAN': 2764, 'MC CLELLAND': 714, 'MACEDONIA': 475, 'MAGNOLIA': 631, 'MALVERN': 1409, 'MARNE': 388, 'MINDEN': 917, 'MINEOLA': 1276, 'MISSOURI VALLEY': 4330, 'MODALE': 505, 'MONDAMIN': 793, 'MOORHEAD': 589, 'NEOLA': 1766, 'OAKLAND': 2385, 'PACIFIC JUNCTION': 1228, 'PANAMA': 511, 'PERSIA': 691, 'PISGAH': 673, 'PORTSMOUTH': 476, 'RED OAK': 7395, 'SHELBY': 941, 'SILVER CITY': 483, 'SOLDIER': 665, 'STANTON': 1315, 'TREYNOR': 1619, 'UNDERWOOD': 1652, 'WALNUT': 1293, 'WESTPHALIA': 420, 'WOODBINE': 2105, 'SHENANDOAH': 6226, 'BLANCHARD': 284, 'BRADDYVILLE': 351, 'CLARINDA': 6652, 'COIN': 387, 'COLLEGE SPRINGS': 537, 'ESSEX': 1433, 'FARRAGUT': 1055, 'HAMBURG': 1997, 'IMOGENE': 318, 'NEW MARKET': 702, 'NORTHBORO': 287, 'PERCIVAL': 327, 'RANDOLPH': 419, 'RIVERTON': 447, 'SHAMBAUGH': 456, 'SIDNEY': 1948, 'TABOR': 1626, 'THURMAN': 521, 'YORKTOWN': 257, 'DUBUQUE': 67772, 'ANDREW': 741, 'BELLEVUE': 2884, 'BERNARD': 861, 'CASCADE': 3155, 'COLESBURG': 1401, 'DELAWARE': 262, 'DELMAR': 927, 'DUNDEE': 618, 'DURANGO': 874, 'DYERSVILLE': 4709, 'EARLVILLE': 1566, 'EDGEWOOD': 2095, 'ELKADER': 2887, 'ELKPORT': 129, 'EPWORTH': 1931, 'FARLEY': 2120, 'FARMERSBURG': 638, 'GARBER': 191, 'GARNAVILLO': 1408, 'GREELEY': 679, 'GUTTENBERG': 4113, 'HOLY CROSS': 1139, 'LA MOTTE': 1132, 'MANCHESTER': 7823, 'MAQUOKETA': 8374, 'MILES': 1083, 'NEW VIENNA': 835, 'NORTH BUENA VIST': 404, 'PEOSTA': 1565, 'PRESTON': 1376, 'SABULA': 1174, 'SAINT DONATUS': 757, 'SAINT OLAF': 466, 'SHERRILL': 1381, 'SPRAGUEVILLE': 492, 'SPRINGBROOK': 497, 'STRAWBERRY POINT': 1825, 'VOLGA': 562, 'WORTHINGTON': 797, 'ZWINGLE': 1320, 'DECORAH': 13593, 'BURR OAK': 484, 'CALMAR': 2218, 'CASTALIA': 1103, 'CHESTER': 571, 'CLERMONT': 817, 'CRESCO': 5785, 'DORCHESTER': 757, 'ELGIN': 963, 'FAYETTE': 1939, 'FORT ATKINSON': 1095, 'HARPERS FERRY': 915, 'HAWKEYE': 1205, 'JACKSON JUNCTION': 369, 'LANSING': 1717, 'LAWLER': 1450, 'LIME SPRINGS': 672, 'LUANA': 388, 'MC GREGOR': 1344, 'MARQUETTE': 276, 'MONONA': 4670, 'NEW ALBIN': 749, 'OSSIAN': 1349, 'POSTVILLE': 885, 'RANDALIA': 159, 'RIDGEWAY': 636, 'SAINT LUCAS': 638, 'WADENA': 551, 'WATERVILLE': 1204, 'WAUCOMA': 727, 'WAUKON': 6134, 'ELDORADO': 3353, 'AINSWORTH': 1265, 'ALBURNETT': 1038, 'AMANA': 450, 'ANAMOSA': 7264, 'ATKINS': 1347, 'BALDWIN': 362, 'BELLE PLAINE': 3562, 'BLAIRSTOWN': 672, 'BRANDON': 717, 'BROOKLYN': 2196, 'CENTER JUNCTION': 647, 'CENTER POINT': 2462, 'CENTRAL CITY': 3478, 'CHELSEA': 906, 'CLARENCE': 1219, 'CLUTIER': 497, 'COGGON': 1053, 'CONROY': 21, 'DEEP RIVER': 596, 'DELHI': 1530, 'DYSART': 1513, 'ELBERON': 337, 'ELWOOD': 413, 'ELY': 1091, 'FAIRFAX': 1392, 'GARRISON': 872, 'HARPER': 324, 'HARTWICK': 376, 'HIAWATHA': 4966, 'HOMESTEAD': 557, 'HOPKINTON': 1547, 'IOWA CITY': 69058, 'CORALVILLE': 12646, 'KALONA': 3058, 'KEOTA': 1439, 'KEYSTONE': 1110, 'KINROSS': 374, 'LADORA': 304, 'LISBON': 1581, 'LOST NATION': 768, 'LOWDEN': 1488, 'LUZERNE': 110, 'MARENGO': 4856, 'MARION': 23227, 'MARTELLE': 716, 'MECHANICSVILLE': 1516, 'MIDDLE AMANA': 902, 'MILLERSBURG': 223, 'MONMOUTH': 304, 'MONTICELLO': 5549, 'MOUNT AUBURN': 784, 'MOUNT VERNON': 4874, 'NEWHALL': 1216, 'NORTH ENGLISH': 1287, 'NORTH LIBERTY': 3241, 'NORWAY': 1317, 'OLIN': 1427, 'ONSLOW': 322, 'OXFORD': 3141, 'OXFORD JUNCTION': 909, 'PALO': 1528, 'PARNELL': 499, 'QUASQUETON': 834, 'RIVERSIDE': 1514, 'ROBINS': 877, 'ROWLEY': 1393, 'RYAN': 1201, 'SCOTCH GROVE': 447, 'SHELLSBURG': 1463, 'SOLON': 2894, 'SOUTH AMANA': 45, 'SOUTH ENGLISH': 502, 'SPRINGVILLE': 2011, 'STANWOOD': 970, 'SWISHER': 3101, 'TAMA': 3242, 'TODDVILLE': 1337, 'TOLEDO': 3891, 'TORONTO': 660, 'VAN HORNE': 1215, 'VICTOR': 1092, 'VINING': 244, 'VINTON': 8276, 'WALKER': 1706, 'WASHINGTON': 9381, 'WATKINS': 485, 'WEBSTER': 154, 'WELLMAN': 1904, 'WEST AMANA': 90, 'WEST BRANCH': 3533, 'WEST CHESTER': 500, 'WILLIAMSBURG': 4304, 'WYOMING': 884, 'CEDAR RAPIDS': 116146, 'HIGHLAND CENTER': 29462, 'AGENCY': 1233, 'ALBIA': 6397, 'BATAVIA': 1164, 'BEACON': 1559, 'BIRMINGHAM': 1023, 'BLAKESBURG': 1337, 'BLOOMFIELD': 4788, 'WEST GROVE': 419, 'BRIGHTON': 1686, 'CANTRIL': 490, 'CEDAR': 242, 'CENTERVILLE': 7725, 'CHILLICOTHE': 249, 'CINCINNATI': 793, 'DELTA': 614, 'DOUDS': 15, 'DRAKESVILLE': 1576, 'EDDYVILLE': 1474, 'ELDON': 1603, 'EXLINE': 432, 'FAIRFIELD': 12147, 'FLORIS': 1087, 'FREMONT': 835, 'HEDRICK': 1304, 'KEOSAUQUA': 2022, 'KIRKVILLE': 670, 'LIBERTYVILLE': 658, 'MELROSE': 664, 'MILTON': 851, 'MORAVIA': 1143, 'MOULTON': 1073, 'MOUNT STERLING': 249, 'MYSTIC': 1002, 'NUMA': 563, 'OLLIE': 631, 'OSKALOOSA': 14376, 'PACKWOOD': 862, 'PLANO': 414, 'PROMISE CITY': 370, 'PULASKI': 442, 'RICHLAND': 1082, 'ROSE HILL': 795, 'SELMA': 659, 'SEYMOUR': 1192, 'SIGOURNEY': 3402, 'UDELL': 195, 'UNIONVILLE': 403, 'BURLINGTON': 30564, 'ARGYLE': 1899, 'BONAPARTE': 903, 'CRAWFORDSVILLE': 603, 'DANVILLE': 1694, 'DENMARK': 869, 'DONNELLSON': 1823, 'FARMINGTON': 961, 'FORT MADISON': 14472, 'HILLSBORO': 213, 'HOUGHTON': 448, 'KEOKUK': 13995, 'LOCKRIDGE': 693, 'MEDIAPOLIS': 3044, 'MIDDLETOWN': 440, 'MONTROSE': 1857, 'MORNING SUN': 1165, 'MOUNT PLEASANT': 11113, 'MOUNT UNION': 446, 'NEW LONDON': 3627, 'OAKVILLE': 709, 'OLDS': 711, 'SALEM': 786, 'SPERRY': 700, 'STOCKPORT': 503, 'WAPELLO': 4379, 'WAYLAND': 1626, 'WEST BURLINGTON': 5420, 'WEST POINT': 2144, 'SAINT PAUL': 623, 'WEVER': 546, 'WINFIELD': 1349, 'YARMOUTH': 339, 'ANDOVER': 856, 'ATALISSA': 721, 'BENNETT': 824, 'BETTENDORF': 29785, 'BLUE GRASS': 7536, 'BRYANT': 252, 'CALAMUS': 790, 'CAMANCHE': 5013, 'CHARLOTTE': 756, 'CLINTON': 30723, 'COLUMBUS JUNCTIO': 3945, 'CONESVILLE': 497, 'DE WITT': 6560, 'BIG ROCK': 596, 'DONAHUE': 685, 'DURANT': 2416, 'ELDRIDGE': 6947, 'GOOSE LAKE': 542, 'GRAND MOUND': 1149, 'LE CLAIRE': 4176, 'LETTS': 1394, 'LONE TREE': 2038, 'LONG GROVE': 2326, 'MOSCOW': 752, 'MUSCATINE': 29779, 'NEW LIBERTY': 615, 'NICHOLS': 797, 'PRINCETON': 1529, 'STOCKTON': 777, 'TIPTON': 5751, 'WALCOTT': 705, 'WELTON': 539, 'WEST LIBERTY': 3552, 'WHEATLAND': 1092, 'WILTON': 3032, 'DAVENPORT': 95743}