020 Reading and Writing Data Files#

COM6018

Copyright © 2023, 2024 Jon Barker, University of Sheffield. All rights reserved.

1 Introduction#

1.1 Storing data in files#

In this course, we will be dealing with many different sets of data. Almost all of these will start life as a file stored on a computer, which we will need to read into our programs. The programs that we write will be transforming or analysing these data in some way. The results will then typically need to be written back to a file so that they can be used by other programs or people. So, understanding how to read and write data files is a key skill for a data scientist.

When storing data in a file, we need to use a standard format so that the data can be easily read by others. There are a huge variety of different data file formats that are used in data science; some are very general purpose, others are specialised `domain-specific’ formats. In these notes, we will be introducing some of the most common formats that you are likely to encounter.

1.2 Human-readable vs. Machine-readable#

One of the first considerations when writing data to a file is whether or not it needs to be human-readable. By human-readable, we mean that the data can be directly inspected and understood by a human, i.e., typically by being represented using ASCII characters. In many cases, this is not required and we can use a machine-readable format (also known as a binary format). A binary format will typically be more compact (i.e., it will consume less storage space) and faster to read and write. However, for small datasets the storage and read/write times are not significant, and a human-readable format is often easier to work with. In this course, we will start with a relatively small dataset and using human-readable formats for all of our data files.

There are many different human-readable data formats, but two of the most common ones for data science are CSV and JSON. We will be looking at these formats in some detail in these notes.

1.3 Some terminology#

Before describing the different data formats, we need to introduce some terminology. When we talk about a dataset, we typically refer to a collection of data items describing the objects in the set. Each data item is described by a collection of fields, where each field describes a different aspect of the object. For example, a dataset might contain information about a number of people. Each person would be a data item and the fields would be things like name, age, height, weight, etc. Note that the fields may be of different types; e.g., the name field would be a string, the age field would be an integer, the height field would be a float, etc.

In data science, and particularly in machine learning, we are often dealing with datasets that represent examples of some larger population. For example, we may have a collection of 10,000 images of cats from which we want to learn about all possible images of cats. In machine learning, each data item is more commonly called a sample and the fields are called features. So depending on the context (or who we are talking to!) we might talk about a dataset containing 10,000 samples each with 100 features; or a dataset having 10,000 data items each with 100 fields.

In these notes on file formats, we will use the terms ‘data item’ and ‘field.’ Later in the course, when discussing machine learning, we will more often use the terms ‘sample’ and ‘feature.’

2 CSV Files#

2.1 The CSV file format#

CSV stands for ‘Comma Separated Values’. It is a very simple format that is commonly used for tabulated data, i.e. data that might be stored in a spreadsheet. It is therefore ideal for our typical case, where we have a dataset containing a number of data items, each with a number of fields.

In CSV, each row stores a single data item and, within the row, the field values are listed separated by commas (hence the name CSV). Optionally, the first row of the file can contain the names of the fields.

For example, a CSV file of wind farm data might be storing a windfarm id, the number of turbines, the turbine height, and the maximum kW power of each wind farm. This would be stored in a file called, for example, data/windfarm.csv, with contents like this,

"id", "turbines", "height", "power"
"WF1355", 13, 53, 19500
"WF1364", 3, 60, 8250
"WF1356", 12, 60, 24000
"WF1357", 36, 60, 72000

The above example stores data for just four wind farms. In practice, a CSV file might contain thousands or hundreds of thousands of data items. Also, in a real dataset there may be a far greater number of fields, e.g., latitude, longitude, year of installation, turbine manufacturer, etc.

2.2 Reading a CSV file with csv.reader#

For handling csv files in Python, we can use the csv module, which is part of the Standard Library. This has a method called reader which will take a file handle and return an iterator object that allows us to read each row of the file as a list of field values. In the example below, this has been used in a list comprehension to load the entire dataset as a list of lists.

import csv
with open('data/windfarm.csv') as csvfile:
    windfarm_reader = csv.reader(csvfile, skipinitialspace=True)
    # Read each row (as a list) and store them as a list of lists.
    data = [row for row in windfarm_reader]

🔺 Note the use of the parameter setting skipinitialspace=True. This tells the reader to ignore whitespace (i.e., space and tab characters) that might occur after the comma separators in the file. This is important because if this is not done then spaces in the file would be incorporated into the field values (which is not normally what you want.)

We can now access the data, for example,

# Print the entire dataset
print(data)
# Print the 2nd entry
print(data[1])
# Print the 3rd field of the 2nd entry
print(data[1][2])
[['id', 'turbines', 'height', 'power'], ['WF1355', '13', '53', '19500.0'], ['WF1364', '3', '60', '8250.0'], ['WF1356', '12', '60', '24000.0'], ['WF1357', '36', '60', '72000.0']]
['WF1355', '13', '53', '19500.0']
53

This code has read the data, but the resulting data are not stored in a very convenient format. The data is returned as a list of lists. The first element of the list contains the names of the fields that are stored as a list of strings. Subsequent elements in the list contain the rows of the csv file with each of these rows stored as a simple list of field values. To interpret these lists, we have to remember what the order of the list means (or use the names in data[0]). A further issue is that all the field values are being treated as strings, e.g. the power for the first windfarm is 19500 kW, where 19500 is a numeric value but is stored as the character string ‘19500’. We would need to take extra steps to convert the fields into the correct types.

2.3 A better way - using csv.DictReader#

Storing our dataset as a list of lists makes it hard to work with. A much more useful representation would be as a list of dictionaries. In this case, each dictionary would store a single data item, and the dictionary entries would store the field values, indexed by their field names. For example, the data would look like this,

[
    {
        "id": 1355,
        "turbines": 13,
        "height": 53,
        "power": 19500
    },
    {
        "id": 1364,
        "turbines": 3,
        "height": 60,
        "power": 8250
    },
    // etc
]

Although this representation has a lot of redundancy (i.e., the field names are repeated for each data item), it is much easier to work with, and the redundancy is not a problem for small datasets. (Later, we will be looking at a package called Pandas that provides much more efficient ways of dealing with very large datasets.)

Fortunately, the csv module allows us to read the file into this format very easily. We simply need to replace the reader object with a dictReader. This is done as follows.

import csv
with open('data/windfarm.csv') as csvfile:
    windfarm_reader = csv.DictReader(csvfile, skipinitialspace=True)
    # ... windfarm_reader is now a DictReader which will read each row as a dictionary
    # The line below remains exactly the same but now generates a list of dicts.
    data = [row for row in windfarm_reader]

Note how the above code snippet compares with the example in the previous section. We have simply had to replace csv.reader with csv.DictReader.

We can now access the data using list indexing to retrieve data items and dictionary indexing to access specific fields. For example,

# print the 1st entry
print(data[0])
# print the power output of the first entry
print(data[0]['power'])
{'id': 'WF1355', 'turbines': '13', 'height': '53', 'power': '19500.0'}
19500.0

This is both easier to write (as we do not have to remember the order of the fields in the original file) and much easier to read, i.e., data[0]['power'] is much more meaningful than data[0][3].

2.4 Dealing with numeric versus string fields#

Note, we still have the problem in the example above that all fields are read in and stored as strings.

A solution to this is to use the quoting parameter of the DictReader to specify that only quoted values should be read as strings; all others are converted into floats. This is done as follows.

import csv
with open('data/windfarm.csv') as csvfile:
    windfarm_reader = csv.DictReader(csvfile, skipinitialspace=True,  quoting=csv.QUOTE_NONNUMERIC)
    # ... windfarm_reader is now a DictReader which will read each row as a dictionary
    # The line below remains exactly the same but now generates a list of dicts.
    data = [row for row in windfarm_reader]

So we can now see that the numeric values are being stored as numbers and not strings.

# print the 1st entry
print(data[0])
{'id': 'WF1355', 'turbines': 13.0, 'height': 53.0, 'power': 19500.0}

This is still not perfect because all numeric values have been stored as floats. We might have hoped that the csv library could infer whether values are integers or floats by the presence of a decimal point. Unfortunately, this is not the case.

We can, however, easily process the data after having read it to convert the values of specific fields to integers if we want to. For example, the following compact piece of code will cast the ‘turbine’ field (which stores the integer number of turbines in the farm) into an integer value. Note that it is effectively regenerating the list by processing each dictionary in turn. (Do not worry too much about the syntax of this code at this stage.)

# Convert the power values to integers
data = [{**row, 'turbines': int(row['turbines'])} for row in data]

# Note how the turbines field is now an integer
print(data)
[{'id': 'WF1355', 'turbines': 13, 'height': 53.0, 'power': 19500.0}, {'id': 'WF1364', 'turbines': 3, 'height': 60.0, 'power': 8250.0}, {'id': 'WF1356', 'turbines': 12, 'height': 60.0, 'power': 24000.0}, {'id': 'WF1357', 'turbines': 36, 'height': 60.0, 'power': 72000.0}]

A more difficult issue is that we have relied on the csv file having quotes around all the string values. In fact, many csv files do not follow this convention, i.e. string valued field will appear unquoted. In this case the “QUOTE_NONNUMERIC” option would cause the parsing to fail as it would try to convert these string into numeric values.

If our csv file has unquoted strings, then the easiest solution is to go back to treating everything as a string value and then doing explicit type conversions ourselves using code like the example above.

Fortunately, in the weeks to come, when we look at the Pandas package, we will see more powerful csv readers that will handle a lot of these issues for us.

3 The JSON data format#

The CSV files that we looked at in the last section are convenient when each field in our data entry can be represented by a simple type such as a string or a number. However, in many cases, the field values might themselves have more complex types such as lists or even dictionaries.

For example, imagine we have weather data for a large number of cities around the world for a given year. For each city (one data entry), we may have simple fields that store, for example, the name and the country, but the weather data might be recorded for each month, i.e., twelve values. Further, for each month we might have separate recordings for say, the daily rainfall, minimum and maximum temperature, the number of snowy days, etc, which would be best stored as a dictionary. So, within the data entry, we have a list of twelve months, and each month is in turn stored as a dictionary. Our resulting data might look something like this,

[
  {
    "city": "Amsterdam",
    "country": "Netherlands",
    "monthlyAvg": [
      {
        "high": 7,
        "low": 3,
        "snowDays": 4,
        "rainfall": 68
      },
      {
        "high": 6,
        "low": 3,
        "snowDays": 2,
        "rainfall": 47
      }
      // etc
    ]
  }
  // etc
]

In the data above, we still have a list of dictionaries, where each dictionary represents a single data entry (that is, one city). However, within a data entry we now have a field “monthlyAvg” which is itself a list of dictionaries (i.e. weather data for each of the twelve months).

This kind of nested data structure is not easily represented in a CSV file. For this type of data, we need a more flexible format. One such format is JSON (JavaScript Object Notation). This is a widely used format for storing data and is used extensively in web applications. It is also a very convenient format for storing data in Python and is now widely used in data science.

JSON files are text files which are usually given the file extension ‘.json’. Their contents look like the text in the example above (in fact, the text above is a snippet of a larger JSON file with ‘//etc’ added where text has been deleted). Dictionary entries are introduced with ‘{’ and terminated with ‘}’. Lists are introduced with ‘[’ and terminated with ‘]’. The values in the dictionary entries can be strings, numbers, lists or even other dictionaries. The values in the lists can be strings, numbers, lists or dictionaries. So, JSON files can be used to store arbitrarily complex data structures. Unlike CSV files, which can vary in their format (e.g., do strings have quotes or not? What character is used as the quote? etc.), the JSON format is strictly defined and so although it can store more complex data, there is no ambiguity in how the data are stored. This makes it easy to write tools for reading and writing JSON files, and there are many such tools available.

(For the full specification of the JSON format see https://www.json.org/json-en.html. Note that in the specification, the term “object” is used to refer to what we have been calling a dictionary, and the term “array” is used to refer to what we have been calling a list. This is largely due to JSON’s origins in JavaScript.)

3.1 Reading JSON files#

As with CSV files, Python has a Standard Library module for reading and writing JSON files. The module is called json and is imported with import json.

The json module has two main functions, load and dump. The load function is used to read a JSON file and convert it into a Python data structure. The dump function is used to convert a Python data structure into a JSON file.

In the example below, we use the load function to read the JSON file data/climate.json and convert it into a Python list, which we have called climate_data.

import json

with open('data/climate.json') as jsonfile:
    climate_data = json.load(jsonfile)

Notice how this code is even simpler than the CSV reading code. This is largely because the strictness of the JSON format means that the load function does not require any additional configuration.

We can now print out the first entry using the following.

print(climate_data[0])
{'id': 1, 'city': 'Amsterdam', 'country': 'Netherlands', 'monthlyAvg': [{'high': 7, 'low': 3, 'dryDays': 19, 'snowDays': 4, 'rainfall': 68}, {'high': 6, 'low': 3, 'dryDays': 13, 'snowDays': 2, 'rainfall': 47}, {'high': 10, 'low': 6, 'dryDays': 16, 'snowDays': 1, 'rainfall': 65}, {'high': 11, 'low': 7, 'dryDays': 12, 'snowDays': 0, 'rainfall': 52}, {'high': 16, 'low': 11, 'dryDays': 15, 'snowDays': 0, 'rainfall': 59}, {'high': 17, 'low': 11, 'dryDays': 14, 'snowDays': 0, 'rainfall': 70}, {'high': 20, 'low': 12, 'dryDays': 14, 'snowDays': 0, 'rainfall': 74}, {'high': 20, 'low': 12, 'dryDays': 15, 'snowDays': 0, 'rainfall': 69}, {'high': 17, 'low': 10, 'dryDays': 14, 'snowDays': 0, 'rainfall': 64}, {'high': 14, 'low': 9, 'dryDays': 16, 'snowDays': 0, 'rainfall': 70}, {'high': 9, 'low': 6, 'dryDays': 20, 'snowDays': 1, 'rainfall': 82}, {'high': 7, 'low': 1, 'dryDays': 19, 'snowDays': 1, 'rainfall': 85}]}

There are a few things to note when comparing this to the earlier CSV example.

  • There is now no ambiguity about string vs numeric types because the JSON format strictly insists that all strings are quoted. In fact, it even insists that the double quote (”) symbol is used for quoting.

  • Numeric values can have an integer of float type. In the example above, all values are integers, but if the values had contained a decimal point, then they would have been read as floats.

  • The reader treats JSON arrays as Python lists. There is no JSON equivalent of a tuple. So, do not try using ( and ) when hand editing a JSON file.

  • The JSON standard requires that the object keys are strings. This is stricter than a general Python dictionary. Python is happy to have dictionaries that have keys of non-string types (e.g., ints). This means that not every Python dictionary can be converted into a JSON object. i.e., the JSON format is very flexible, but not as flexible as Python. In practice, this is rarely an issue for the types of data that are used in data science.

3.2 Writing JSON files#

Writing JSON files is as easy as reading them. To write a JSON-compatible Python data structure to a file, we use the dump function. For example, to write out the climate data that we have just read in, we can use,

with open('data/climate_copy.json', 'w') as jsonfile:
    json.dump(climate_data, jsonfile)

We can check the contents of this file,

%%bash
head data/climate_copy.json
[{"id": 1, "city": "Amsterdam", "country": "Netherlands", "monthlyAvg": [{"high": 7, "low": 3, "dryDays": 19, "snowDays": 4, "rainfall": 68}, {"high": 6, "low": 3, "dryDays": 13, "snowDays": 2, "rainfall": 47}, {"high": 10, "low": 6, "dryDays": 16, "snowDays": 1, "rainfall": 65}, {"high": 11, "low": 7, "dryDays": 12, "snowDays": 0, "rainfall": 52}, {"high": 16, "low": 11, "dryDays": 15, "snowDays": 0, "rainfall": 59}, {"high": 17, "low": 11, "dryDays": 14, "snowDays": 0, "rainfall": 70}, {"high": 20, "low": 12, "dryDays": 14, "snowDays": 0, "rainfall": 74}, {"high": 20, "low": 12, "dryDays": 15, "snowDays": 0, "rainfall": 69}, {"high": 17, "low": 10, "dryDays": 14, "snowDays": 0, "rainfall": 64}, {"high": 14, "low": 9, "dryDays": 16, "snowDays": 0, "rainfall": 70}, {"high": 9, "low": 6, "dryDays": 20, "snowDays": 1, "rainfall": 82}, {"high": 7, "low": 1, "dryDays": 19, "snowDays": 1, "rainfall": 85}]}, {"id": 2, "city": "Athens", "country": "Greece", "monthlyAvg": [{"high": 12, "low": 7, "dryDays": 21, "snowDays": 1, "rainfall": 53}, {"high": 12, "low": 7, "dryDays": 20, "snowDays": 1, "rainfall": 34.4}, {"high": 14, "low": 8, "dryDays": 23, "snowDays": 0, "rainfall": 56.8}, {"high": 18, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 43.8}, {"high": 22, "low": 15, "dryDays": 26, "snowDays": 0, "rainfall": 16.9}, {"high": 26, "low": 19, "dryDays": 29, "snowDays": 0, "rainfall": 9.6}, {"high": 28, "low": 22, "dryDays": 30, "snowDays": 0, "rainfall": 4.7}, {"high": 28, "low": 22, "dryDays": 29, "snowDays": 0, "rainfall": 5.8}, {"high": 25, "low": 19, "dryDays": 27, "snowDays": 0, "rainfall": 23.5}, {"high": 21, "low": 15, "dryDays": 25, "snowDays": 0, "rainfall": 48.2}, {"high": 17, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 66.6}, {"high": 13, "low": 8, "dryDays": 18, "snowDays": 1, "rainfall": 97.6}]}, {"id": 3, "city": "Atlanta GA", "country": "United States", "monthlyAvg": [{"high": 12, "low": 2, "dryDays": 18, "snowDays": 2, "rainfall": 99.5}, {"high": 14, "low": 3, "dryDays": 15, "snowDays": 1, "rainfall": 100.4}, {"high": 19, "low": 7, "dryDays": 19, "snowDays": 1, "rainfall": 128.1}, {"high": 23, "low": 11, "dryDays": 18, "snowDays": 0, "rainfall": 86.1}, {"high": 27, "low": 16, "dryDays": 19, "snowDays": 0, "rainfall": 104.8}, {"high": 30, "low": 20, "dryDays": 15, "snowDays": 0, "rainfall": 112.3}, {"high": 31, "low": 22, "dryDays": 14, "snowDays": 0, "rainfall": 178}, {"high": 32, "low": 22, "dryDays": 19, "snowDays": 0, "rainfall": 142.8}, {"high": 28, "low": 18, "dryDays": 20, "snowDays": 0, "rainfall": 122.2}, {"high": 23, "low": 12, "dryDays": 22, "snowDays": 0, "rainfall": 73}, {"high": 18, "low": 7, "dryDays": 20, "snowDays": 0, "rainfall": 106.9}, {"high": 13, "low": 2, "dryDays": 18, "snowDays": 2, "rainfall": 101.9}]}, {"id": 4, "city": "Auckland", "country": "New Zealand", "monthlyAvg": [{"high": 23, "low": 16, "dryDays": 24, "snowDays": 0, "rainfall": 25.6}, {"high": 24, "low": 16, "dryDays": 23, "snowDays": 0, "rainfall": 19.9}, {"high": 22, "low": 15, "dryDays": 25, "snowDays": 0, "rainfall": 21.6}, {"high": 20, "low": 13, "dryDays": 23, "snowDays": 0, "rainfall": 46.7}, {"high": 17, "low": 11, "dryDays": 22, "snowDays": 0, "rainfall": 40.4}, {"high": 15, "low": 9, "dryDays": 21, "snowDays": 0, "rainfall": 46.7}, {"high": 14, "low": 8, "dryDays": 23, "snowDays": 0, "rainfall": 56.5}, {"high": 15, "low": 8, "dryDays": 23, "snowDays": 0, "rainfall": 56.4}, {"high": 16, "low": 10, "dryDays": 23, "snowDays": 0, "rainfall": 30.7}, {"high": 18, "low": 11, "dryDays": 24, "snowDays": 0, "rainfall": 32.3}, {"high": 19, "low": 13, "dryDays": 24, "snowDays": 0, "rainfall": 33.9}, {"high": 21, "low": 15, "dryDays": 25, "snowDays": 0, "rainfall": 26.6}]}, {"id": 5, "city": "Austin TX", "country": "United States", "monthlyAvg": [{"high": 18, "low": 6, "dryDays": 15, "snowDays": 1, "rainfall": 67.8}, {"high": 20, "low": 7, "dryDays": 15, "snowDays": 0, "rainfall": 72.8}, {"high": 23, "low": 10, "dryDays": 16, "snowDays": 0, "rainfall": 67.8}, {"high": 27, "low": 14, "dryDays": 17, "snowDays": 0, "rainfall": 63.9}, {"high": 31, "low": 19, "dryDays": 16, "snowDays": 0, "rainfall": 122.4}, {"high": 34, "low": 22, "dryDays": 19, "snowDays": 0, "rainfall": 97.1}, {"high": 35, "low": 23, "dryDays": 24, "snowDays": 0, "rainfall": 31.6}, {"high": 36, "low": 23, "dryDays": 21, "snowDays": 0, "rainfall": 79.2}, {"high": 33, "low": 20, "dryDays": 20, "snowDays": 0, "rainfall": 63.9}, {"high": 29, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 99.7}, {"high": 23, "low": 10, "dryDays": 17, "snowDays": 0, "rainfall": 66.2}, {"high": 19, "low": 6, "dryDays": 17, "snowDays": 1, "rainfall": 93}]}, {"id": 6, "city": "Bangkok", "country": "Thailand", "monthlyAvg": [{"high": 33, "low": 23, "dryDays": 29, "snowDays": 0, "rainfall": 9.9}, {"high": 33, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 17.7}, {"high": 34, "low": 26, "dryDays": 25, "snowDays": 0, "rainfall": 47.1}, {"high": 35, "low": 27, "dryDays": 22, "snowDays": 0, "rainfall": 75.6}, {"high": 34, "low": 27, "dryDays": 14, "snowDays": 0, "rainfall": 163.7}, {"high": 34, "low": 26, "dryDays": 12, "snowDays": 0, "rainfall": 138.6}, {"high": 33, "low": 26, "dryDays": 14, "snowDays": 0, "rainfall": 128.8}, {"high": 33, "low": 26, "dryDays": 13, "snowDays": 0, "rainfall": 136.7}, {"high": 33, "low": 25, "dryDays": 8, "snowDays": 0, "rainfall": 254.5}, {"high": 33, "low": 25, "dryDays": 12, "snowDays": 0, "rainfall": 193.4}, {"high": 33, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 26.1}, {"high": 33, "low": 22, "dryDays": 29, "snowDays": 0, "rainfall": 5.8}]}, {"id": 7, "city": "Barcelona", "country": "Spain", "monthlyAvg": [{"high": 14, "low": 5, "dryDays": 22, "snowDays": 0, "rainfall": 47}, {"high": 15, "low": 6, "dryDays": 21, "snowDays": 0, "rainfall": 23.3}, {"high": 17, "low": 8, "dryDays": 23, "snowDays": 0, "rainfall": 55.1}, {"high": 18, "low": 10, "dryDays": 20, "snowDays": 0, "rainfall": 42.2}, {"high": 22, "low": 13, "dryDays": 21, "snowDays": 0, "rainfall": 49.1}, {"high": 25, "low": 17, "dryDays": 23, "snowDays": 0, "rainfall": 28.6}, {"high": 28, "low": 20, "dryDays": 26, "snowDays": 0, "rainfall": 26.5}, {"high": 29, "low": 21, "dryDays": 22, "snowDays": 0, "rainfall": 65.1}, {"high": 26, "low": 17, "dryDays": 20, "snowDays": 0, "rainfall": 78}, {"high": 22, "low": 14, "dryDays": 20, "snowDays": 0, "rainfall": 84.7}, {"high": 17, "low": 9, "dryDays": 20, "snowDays": 0, "rainfall": 59.4}, {"high": 14, "low": 6, "dryDays": 21, "snowDays": 0, "rainfall": 46.1}]}, {"id": 8, "city": "Beijing", "country": "China", "monthlyAvg": [{"high": 2, "low": -9, "dryDays": 28, "snowDays": 3, "rainfall": 3.6}, {"high": 6, "low": -5, "dryDays": 26, "snowDays": 3, "rainfall": 5.1}, {"high": 13, "low": 1, "dryDays": 27, "snowDays": 2, "rainfall": 17}, {"high": 21, "low": 8, "dryDays": 24, "snowDays": 0, "rainfall": 26.4}, {"high": 27, "low": 14, "dryDays": 21, "snowDays": 0, "rainfall": 44}, {"high": 31, "low": 19, "dryDays": 16, "snowDays": 0, "rainfall": 72.2}, {"high": 32, "low": 22, "dryDays": 13, "snowDays": 0, "rainfall": 185.5}, {"high": 31, "low": 21, "dryDays": 16, "snowDays": 0, "rainfall": 156.5}, {"high": 26, "low": 15, "dryDays": 19, "snowDays": 0, "rainfall": 55.4}, {"high": 20, "low": 7, "dryDays": 23, "snowDays": 0, "rainfall": 35.3}, {"high": 10, "low": -1, "dryDays": 25, "snowDays": 2, "rainfall": 11.5}, {"high": 4, "low": -6, "dryDays": 29, "snowDays": 4, "rainfall": 2.6}]}, {"id": 9, "city": "Berlin", "country": "Germany", "monthlyAvg": [{"high": 3, "low": -1, "dryDays": 7, "snowDays": 10, "rainfall": 42}, {"high": 3, "low": -2, "dryDays": 10, "snowDays": 10, "rainfall": 36}, {"high": 8, "low": 1, "dryDays": 11, "snowDays": 5, "rainfall": 30}, {"high": 13, "low": 4, "dryDays": 11, "snowDays": 2, "rainfall": 36}, {"high": 19, "low": 9, "dryDays": 13, "snowDays": 0, "rainfall": 48}, {"high": 21, "low": 12, "dryDays": 9, "snowDays": 0, "rainfall": 72}, {"high": 24, "low": 14, "dryDays": 14, "snowDays": 0, "rainfall": 36}, {"high": 24, "low": 14, "dryDays": 15, "snowDays": 0, "rainfall": 45}, {"high": 19, "low": 11, "dryDays": 12, "snowDays": 0, "rainfall": 39}, {"high": 14, "low": 7, "dryDays": 13, "snowDays": 0, "rainfall": 24}, {"high": 7, "low": 3, "dryDays": 9, "snowDays": 4, "rainfall": 51}, {"high": 4, "low": 0, "dryDays": 8, "snowDays": 9, "rainfall": 51}]}, {"id": 10, "city": "Bologna", "country": "Italy", "monthlyAvg": [{"high": 11, "low": 2, "dryDays": 20, "snowDays": 1, "rainfall": 45}, {"high": 13, "low": 3, "dryDays": 20, "snowDays": 1, "rainfall": 48.6}, {"high": 16, "low": 6, "dryDays": 22, "snowDays": 0, "rainfall": 42.5}, {"high": 19, "low": 8, "dryDays": 17, "snowDays": 0, "rainfall": 95}, {"high": 25, "low": 13, "dryDays": 21, "snowDays": 0, "rainfall": 77}, {"high": 29, "low": 16, "dryDays": 22, "snowDays": 0, "rainfall": 50.4}, {"high": 32, "low": 19, "dryDays": 26, "snowDays": 0, "rainfall": 31.5}, {"high": 32, "low": 19, "dryDays": 24, "snowDays": 0, "rainfall": 42.5}, {"high": 27, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 76.2}, {"high": 21, "low": 11, "dryDays": 18, "snowDays": 0, "rainfall": 106.9}, {"high": 15, "low": 7, "dryDays": 15, "snowDays": 0, "rainfall": 133.4}, {"high": 11, "low": 3, "dryDays": 18, "snowDays": 1, "rainfall": 86.8}]}, {"id": 11, "city": "Boston MA", "country": "United States", "monthlyAvg": [{"high": 4, "low": -4, "dryDays": 15, "snowDays": 10, "rainfall": 110.9}, {"high": 4, "low": -4, "dryDays": 15, "snowDays": 9, "rainfall": 91.3}, {"high": 7, "low": -1, "dryDays": 15, "snowDays": 7, "rainfall": 131.1}, {"high": 12, "low": 4, "dryDays": 13, "snowDays": 2, "rainfall": 118.9}, {"high": 18, "low": 9, "dryDays": 15, "snowDays": 0, "rainfall": 96.5}, {"high": 23, "low": 14, "dryDays": 16, "snowDays": 0, "rainfall": 87.8}, {"high": 26, "low": 17, "dryDays": 18, "snowDays": 0, "rainfall": 67.9}, {"high": 25, "low": 17, "dryDays": 18, "snowDays": 0, "rainfall": 99.6}, {"high": 22, "low": 14, "dryDays": 18, "snowDays": 0, "rainfall": 117.5}, {"high": 16, "low": 8, "dryDays": 17, "snowDays": 0, "rainfall": 102.8}, {"high": 11, "low": 3, "dryDays": 15, "snowDays": 1, "rainfall": 110.3}, {"high": 6, "low": -2, "dryDays": 16, "snowDays": 7, "rainfall": 109.8}]}, {"id": 12, "city": "Boulder CO", "country": "United States", "monthlyAvg": [{"high": 8, "low": -15, "dryDays": 18, "snowDays": 7, "rainfall": 45}, {"high": 9, "low": -13, "dryDays": 17, "snowDays": 7, "rainfall": 50}, {"high": 15, "low": -8, "dryDays": 22, "snowDays": 9, "rainfall": 44}, {"high": 18, "low": -2, "dryDays": 22, "snowDays": 6, "rainfall": 55}, {"high": 22, "low": 5, "dryDays": 20, "snowDays": 2, "rainfall": 45}, {"high": 29, "low": 9, "dryDays": 20, "snowDays": 1, "rainfall": 35}, {"high": 33, "low": 14, "dryDays": 19, "snowDays": 0, "rainfall": 48}, {"high": 30, "low": 12, "dryDays": 20, "snowDays": 0, "rainfall": 47}, {"high": 27, "low": 7, "dryDays": 20, "snowDays": 1, "rainfall": 51}, {"high": 18, "low": -1, "dryDays": 16, "snowDays": 2, "rainfall": 42}, {"high": 11, "low": -6, "dryDays": 20, "snowDays": 6, "rainfall": 47}, {"high": 7, "low": -11, "dryDays": 20, "snowDays": 7, "rainfall": 40}]}, {"id": 13, "city": "Brasilia", "country": "Brazil", "monthlyAvg": [{"high": 31, "low": 21, "dryDays": 17, "snowDays": 0, "rainfall": 147.1}, {"high": 31, "low": 21, "dryDays": 14, "snowDays": 0, "rainfall": 127.7}, {"high": 31, "low": 21, "dryDays": 18, "snowDays": 0, "rainfall": 135.8}, {"high": 31, "low": 20, "dryDays": 21, "snowDays": 0, "rainfall": 75.8}, {"high": 30, "low": 17, "dryDays": 28, "snowDays": 0, "rainfall": 17.1}, {"high": 30, "low": 15, "dryDays": 28, "snowDays": 0, "rainfall": 15.2}, {"high": 30, "low": 15, "dryDays": 30, "snowDays": 0, "rainfall": 2.3}, {"high": 32, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 10.2}, {"high": 33, "low": 19, "dryDays": 24, "snowDays": 0, "rainfall": 24}, {"high": 33, "low": 21, "dryDays": 21, "snowDays": 0, "rainfall": 54.6}, {"high": 31, "low": 21, "dryDays": 18, "snowDays": 0, "rainfall": 138.5}, {"high": 30, "low": 21, "dryDays": 17, "snowDays": 0, "rainfall": 198.7}]}, {"id": 14, "city": "Brisbane", "country": "Australia", "monthlyAvg": [{"high": 29, "low": 21, "dryDays": 17, "snowDays": 0, "rainfall": 97.3}, {"high": 29, "low": 21, "dryDays": 14, "snowDays": 0, "rainfall": 142.7}, {"high": 28, "low": 19, "dryDays": 17, "snowDays": 0, "rainfall": 85.8}, {"high": 26, "low": 16, "dryDays": 18, "snowDays": 0, "rainfall": 80.9}, {"high": 24, "low": 13, "dryDays": 20, "snowDays": 0, "rainfall": 107.4}, {"high": 21, "low": 10, "dryDays": 21, "snowDays": 0, "rainfall": 51.6}, {"high": 21, "low": 8, "dryDays": 23, "snowDays": 0, "rainfall": 28.6}, {"high": 22, "low": 9, "dryDays": 24, "snowDays": 0, "rainfall": 33.6}, {"high": 24, "low": 12, "dryDays": 22, "snowDays": 0, "rainfall": 28.4}, {"high": 26, "low": 15, "dryDays": 21, "snowDays": 0, "rainfall": 60.4}, {"high": 27, "low": 17, "dryDays": 17, "snowDays": 0, "rainfall": 98.4}, {"high": 28, "low": 19, "dryDays": 18, "snowDays": 0, "rainfall": 112.8}]}, {"id": 15, "city": "Brussels", "country": "Belgium", "monthlyAvg": [{"high": 6, "low": 1, "dryDays": 11, "snowDays": 3, "rainfall": 56}, {"high": 7, "low": 2, "dryDays": 11, "snowDays": 6, "rainfall": 60.3}, {"high": 11, "low": 4, "dryDays": 12, "snowDays": 4, "rainfall": 52}, {"high": 14, "low": 5, "dryDays": 14, "snowDays": 2, "rainfall": 44.4}, {"high": 19, "low": 9, "dryDays": 16, "snowDays": 0, "rainfall": 59.2}, {"high": 21, "low": 11, "dryDays": 14, "snowDays": 0, "rainfall": 60}, {"high": 23, "low": 14, "dryDays": 14, "snowDays": 0, "rainfall": 77.5}, {"high": 23, "low": 14, "dryDays": 15, "snowDays": 0, "rainfall": 80.1}, {"high": 19, "low": 11, "dryDays": 13, "snowDays": 0, "rainfall": 54}, {"high": 15, "low": 8, "dryDays": 13, "snowDays": 0, "rainfall": 57}, {"high": 9, "low": 4, "dryDays": 11, "snowDays": 2, "rainfall": 63.6}, {"high": 6, "low": 1, "dryDays": 10, "snowDays": 5, "rainfall": 67.5}]}, {"id": 16, "city": "Budapest", "country": "Hungary", "monthlyAvg": [{"high": 3, "low": -3, "dryDays": 17, "snowDays": 7, "rainfall": 28}, {"high": 6, "low": -2, "dryDays": 17, "snowDays": 7, "rainfall": 23}, {"high": 11, "low": 2, "dryDays": 17, "snowDays": 3, "rainfall": 32.8}, {"high": 17, "low": 7, "dryDays": 15, "snowDays": 0, "rainfall": 45.2}, {"high": 23, "low": 11, "dryDays": 16, "snowDays": 0, "rainfall": 57.3}, {"high": 26, "low": 15, "dryDays": 16, "snowDays": 0, "rainfall": 68.9}, {"high": 28, "low": 16, "dryDays": 17, "snowDays": 0, "rainfall": 78}, {"high": 28, "low": 16, "dryDays": 20, "snowDays": 0, "rainfall": 63.3}, {"high": 22, "low": 12, "dryDays": 18, "snowDays": 0, "rainfall": 85}, {"high": 16, "low": 7, "dryDays": 18, "snowDays": 0, "rainfall": 53.4}, {"high": 9, "low": 2, "dryDays": 15, "snowDays": 4, "rainfall": 55.1}, {"high": 3, "low": -2, "dryDays": 16, "snowDays": 8, "rainfall": 38.5}]}, {"id": 17, "city": "Buenos Aires", "country": "Argentina", "monthlyAvg": [{"high": 29, "low": 21, "dryDays": 21, "snowDays": 0, "rainfall": 108.1}, {"high": 28, "low": 20, "dryDays": 19, "snowDays": 0, "rainfall": 81.9}, {"high": 26, "low": 19, "dryDays": 21, "snowDays": 0, "rainfall": 109}, {"high": 22, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 93.9}, {"high": 19, "low": 12, "dryDays": 23, "snowDays": 0, "rainfall": 72.2}, {"high": 16, "low": 9, "dryDays": 21, "snowDays": 0, "rainfall": 46}, {"high": 15, "low": 8, "dryDays": 22, "snowDays": 0, "rainfall": 39.9}, {"high": 17, "low": 9, "dryDays": 23, "snowDays": 0, "rainfall": 47.9}, {"high": 19, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 43.4}, {"high": 22, "low": 14, "dryDays": 19, "snowDays": 0, "rainfall": 122.1}, {"high": 25, "low": 17, "dryDays": 20, "snowDays": 0, "rainfall": 75.8}, {"high": 28, "low": 19, "dryDays": 20, "snowDays": 0, "rainfall": 82.4}]}, {"id": 18, "city": "Calgary", "country": "Canada", "monthlyAvg": [{"high": -1, "low": -14, "dryDays": 21, "snowDays": 12, "rainfall": 11.4}, {"high": 2, "low": -12, "dryDays": 20, "snowDays": 11, "rainfall": 10.5}, {"high": 5, "low": -9, "dryDays": 20, "snowDays": 13, "rainfall": 17.1}, {"high": 13, "low": -2, "dryDays": 16, "snowDays": 9, "rainfall": 28.9}, {"high": 17, "low": 2, "dryDays": 13, "snowDays": 5, "rainfall": 60.6}, {"high": 21, "low": 7, "dryDays": 10, "snowDays": 0, "rainfall": 113.3}, {"high": 25, "low": 10, "dryDays": 14, "snowDays": 0, "rainfall": 59.3}, {"high": 24, "low": 8, "dryDays": 15, "snowDays": 0, "rainfall": 58.6}, {"high": 20, "low": 4, "dryDays": 17, "snowDays": 2, "rainfall": 35.9}, {"high": 13, "low": -2, "dryDays": 21, "snowDays": 7, "rainfall": 17}, {"high": 5, "low": -8, "dryDays": 20, "snowDays": 11, "rainfall": 15.8}, {"high": 1, "low": -12, "dryDays": 23, "snowDays": 11, "rainfall": 11.2}]}, {"id": 19, "city": "Canberra", "country": "Australia", "monthlyAvg": [{"high": 28, "low": 13, "dryDays": 22, "snowDays": 0, "rainfall": 57.1}, {"high": 28, "low": 13, "dryDays": 21, "snowDays": 0, "rainfall": 52.9}, {"high": 25, "low": 10, "dryDays": 24, "snowDays": 0, "rainfall": 36.1}, {"high": 21, "low": 6, "dryDays": 23, "snowDays": 0, "rainfall": 33.1}, {"high": 17, "low": 3, "dryDays": 23, "snowDays": 0, "rainfall": 33}, {"high": 13, "low": 1, "dryDays": 19, "snowDays": 0, "rainfall": 47.7}, {"high": 12, "low": 0, "dryDays": 18, "snowDays": 0, "rainfall": 42.3}, {"high": 14, "low": 1, "dryDays": 21, "snowDays": 0, "rainfall": 40.3}, {"high": 17, "low": 3, "dryDays": 20, "snowDays": 0, "rainfall": 50.3}, {"high": 20, "low": 6, "dryDays": 21, "snowDays": 0, "rainfall": 49}, {"high": 23, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 69.1}, {"high": 26, "low": 11, "dryDays": 22, "snowDays": 0, "rainfall": 53.5}]}, {"id": 20, "city": "Cape Town", "country": "South Africa", "monthlyAvg": [{"high": 28, "low": 16, "dryDays": 24, "snowDays": 0, "rainfall": 9.1}, {"high": 29, "low": 16, "dryDays": 22, "snowDays": 0, "rainfall": 14.8}, {"high": 27, "low": 15, "dryDays": 24, "snowDays": 0, "rainfall": 14.5}, {"high": 25, "low": 12, "dryDays": 20, "snowDays": 0, "rainfall": 62.6}, {"high": 22, "low": 10, "dryDays": 18, "snowDays": 0, "rainfall": 64}, {"high": 19, "low": 8, "dryDays": 14, "snowDays": 70, "rainfall": 79.3}, {"high": 19, "low": 7, "dryDays": 15, "snowDays": 0, "rainfall": 94.3}, {"high": 19, "low": 8, "dryDays": 15, "snowDays": 0, "rainfall": 68.3}, {"high": 21, "low": 9, "dryDays": 16, "snowDays": 0, "rainfall": 43.8}, {"high": 23, "low": 11, "dryDays": 20, "snowDays": 0, "rainfall": 37.3}, {"high": 25, "low": 13, "dryDays": 21, "snowDays": 0, "rainfall": 24.2}, {"high": 27, "low": 15, "dryDays": 23, "snowDays": 0, "rainfall": 17.4}]}, {"id": 21, "city": "Chiang Mai", "country": "Thailand", "monthlyAvg": [{"high": 30, "low": 14, "dryDays": 30, "snowDays": 0, "rainfall": 5.3}, {"high": 32, "low": 16, "dryDays": 26, "snowDays": 0, "rainfall": 13.7}, {"high": 35, "low": 19, "dryDays": 27, "snowDays": 0, "rainfall": 29.2}, {"high": 37, "low": 22, "dryDays": 21, "snowDays": 0, "rainfall": 56.3}, {"high": 34, "low": 23, "dryDays": 12, "snowDays": 0, "rainfall": 166.3}, {"high": 33, "low": 24, "dryDays": 9, "snowDays": 0, "rainfall": 119.7}, {"high": 32, "low": 24, "dryDays": 8, "snowDays": 0, "rainfall": 141.7}, {"high": 31, "low": 23, "dryDays": 7, "snowDays": 0, "rainfall": 210.5}, {"high": 32, "low": 23, "dryDays": 8, "snowDays": 0, "rainfall": 237.8}, {"high": 31, "low": 22, "dryDays": 16, "snowDays": 0, "rainfall": 113.7}, {"high": 30, "low": 19, "dryDays": 24, "snowDays": 0, "rainfall": 53.9}, {"high": 29, "low": 15, "dryDays": 29, "snowDays": 0, "rainfall": 17.6}]}, {"id": 22, "city": "Chicago IL", "country": "United States", "monthlyAvg": [{"high": 1, "low": -6, "dryDays": 23, "snowDays": 15, "rainfall": 17.4}, {"high": 4, "low": -4, "dryDays": 21, "snowDays": 10, "rainfall": 25}, {"high": 10, "low": 0, "dryDays": 18, "snowDays": 8, "rainfall": 39.5}, {"high": 17, "low": 6, "dryDays": 18, "snowDays": 3, "rainfall": 57.9}, {"high": 22, "low": 11, "dryDays": 14, "snowDays": 0, "rainfall": 108.9}, {"high": 26, "low": 16, "dryDays": 18, "snowDays": 0, "rainfall": 87.4}, {"high": 29, "low": 20, "dryDays": 19, "snowDays": 0, "rainfall": 94.8}, {"high": 28, "low": 19, "dryDays": 18, "snowDays": 0, "rainfall": 98.1}, {"high": 25, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 59.6}, {"high": 18, "low": 9, "dryDays": 18, "snowDays": 0, "rainfall": 66}, {"high": 11, "low": 3, "dryDays": 16, "snowDays": 4, "rainfall": 61.8}, {"high": 3, "low": -4, "dryDays": 22, "snowDays": 13, "rainfall": 31}]}, {"id": 23, "city": "Christchurch", "country": "New Zealand", "monthlyAvg": [{"high": 22, "low": 12, "dryDays": 25, "snowDays": 0, "rainfall": 16.5}, {"high": 22, "low": 12, "dryDays": 23, "snowDays": 0, "rainfall": 12.7}, {"high": 20, "low": 10, "dryDays": 25, "snowDays": 0, "rainfall": 17}, {"high": 17, "low": 7, "dryDays": 24, "snowDays": 0, "rainfall": 18.6}, {"high": 14, "low": 4, "dryDays": 25, "snowDays": 0, "rainfall": 18.8}, {"high": 12, "low": 1, "dryDays": 23, "snowDays": 1, "rainfall": 20.5}, {"high": 11, "low": 1, "dryDays": 26, "snowDays": 0, "rainfall": 18.6}, {"high": 12, "low": 2, "dryDays": 25, "snowDays": 1, "rainfall": 21.1}, {"high": 15, "low": 4, "dryDays": 25, "snowDays": 0, "rainfall": 16.2}, {"high": 17, "low": 6, "dryDays": 26, "snowDays": 0, "rainfall": 13.4}, {"high": 19, "low": 8, "dryDays": 26, "snowDays": 0, "rainfall": 15.6}, {"high": 21, "low": 10, "dryDays": 26, "snowDays": 0, "rainfall": 19.3}]}, {"id": 24, "city": "Copenhagen", "country": "Denmark", "monthlyAvg": [{"high": 4, "low": -1, "dryDays": 15, "snowDays": 7, "rainfall": 22.5}, {"high": 4, "low": 0, "dryDays": 13, "snowDays": 8, "rainfall": 19.2}, {"high": 7, "low": 1, "dryDays": 16, "snowDays": 5, "rainfall": 18.7}, {"high": 12, "low": 4, "dryDays": 16, "snowDays": 1, "rainfall": 18}, {"high": 17, "low": 8, "dryDays": 19, "snowDays": 0, "rainfall": 26.9}, {"high": 20, "low": 11, "dryDays": 16, "snowDays": 0, "rainfall": 37.3}, {"high": 23, "low": 13, "dryDays": 17, "snowDays": 0, "rainfall": 42}, {"high": 22, "low": 14, "dryDays": 15, "snowDays": 0, "rainfall": 48.4}, {"high": 17, "low": 10, "dryDays": 15, "snowDays": 0, "rainfall": 30.2}, {"high": 12, "low": 6, "dryDays": 15, "snowDays": 2, "rainfall": 34.3}, {"high": 8, "low": 3, "dryDays": 12, "snowDays": 2, "rainfall": 32.8}, {"high": 5, "low": 0, "dryDays": 13, "snowDays": 6, "rainfall": 28.7}]}, {"id": 25, "city": "Dallas TX", "country": "United States", "monthlyAvg": [{"high": 15, "low": 4, "dryDays": 20, "snowDays": 2, "rainfall": 60.9}, {"high": 18, "low": 6, "dryDays": 18, "snowDays": 1, "rainfall": 70}, {"high": 21, "low": 10, "dryDays": 19, "snowDays": 0, "rainfall": 89.3}, {"high": 26, "low": 14, "dryDays": 19, "snowDays": 0, "rainfall": 74.3}, {"high": 30, "low": 19, "dryDays": 19, "snowDays": 0, "rainfall": 94.4}, {"high": 33, "low": 23, "dryDays": 20, "snowDays": 0, "rainfall": 91.3}, {"high": 36, "low": 25, "dryDays": 24, "snowDays": 0, "rainfall": 52.8}, {"high": 36, "low": 25, "dryDays": 23, "snowDays": 0, "rainfall": 48.3}, {"high": 32, "low": 21, "dryDays": 22, "snowDays": 0, "rainfall": 56.4}, {"high": 27, "low": 15, "dryDays": 22, "snowDays": 0, "rainfall": 115.9}, {"high": 20, "low": 9, "dryDays": 20, "snowDays": 0, "rainfall": 83.9}, {"high": 16, "low": 5, "dryDays": 21, "snowDays": 1, "rainfall": 86.4}]}, {"id": 26, "city": "Denver CO", "country": "United States", "monthlyAvg": [{"high": 8, "low": -15, "dryDays": 18, "snowDays": 7, "rainfall": 45}, {"high": 9, "low": -13, "dryDays": 17, "snowDays": 7, "rainfall": 50}, {"high": 15, "low": -8, "dryDays": 22, "snowDays": 9, "rainfall": 44}, {"high": 18, "low": -2, "dryDays": 22, "snowDays": 6, "rainfall": 55}, {"high": 22, "low": 5, "dryDays": 20, "snowDays": 2, "rainfall": 45}, {"high": 29, "low": 9, "dryDays": 20, "snowDays": 1, "rainfall": 35}, {"high": 33, "low": 14, "dryDays": 19, "snowDays": 0, "rainfall": 48}, {"high": 30, "low": 12, "dryDays": 20, "snowDays": 0, "rainfall": 47}, {"high": 27, "low": 7, "dryDays": 20, "snowDays": 1, "rainfall": 51}, {"high": 18, "low": -1, "dryDays": 16, "snowDays": 2, "rainfall": 42}, {"high": 11, "low": -6, "dryDays": 20, "snowDays": 6, "rainfall": 47}, {"high": 7, "low": -11, "dryDays": 20, "snowDays": 7, "rainfall": 40}]}, {"id": 27, "city": "Detroit MI", "country": "United States", "monthlyAvg": [{"high": 1, "low": -8, "dryDays": 13, "snowDays": 20, "rainfall": 45.2}, {"high": 2, "low": -8, "dryDays": 15, "snowDays": 16, "rainfall": 37.3}, {"high": 8, "low": -4, "dryDays": 16, "snowDays": 12, "rainfall": 44}, {"high": 16, "low": 2, "dryDays": 13, "snowDays": 5, "rainfall": 73.3}, {"high": 22, "low": 7, "dryDays": 13, "snowDays": 0, "rainfall": 81.6}, {"high": 27, "low": 13, "dryDays": 14, "snowDays": 0, "rainfall": 79.5}, {"high": 29, "low": 15, "dryDays": 16, "snowDays": 0, "rainfall": 136.7}, {"high": 28, "low": 14, "dryDays": 16, "snowDays": 0, "rainfall": 117.2}, {"high": 24, "low": 10, "dryDays": 17, "snowDays": 0, "rainfall": 110.6}, {"high": 17, "low": 4, "dryDays": 16, "snowDays": 2, "rainfall": 60.7}, {"high": 9, "low": -1, "dryDays": 14, "snowDays": 9, "rainfall": 67.3}, {"high": 3, "low": -6, "dryDays": 14, "snowDays": 17, "rainfall": 44.7}]}, {"id": 28, "city": "Dubai", "country": "United Arab Emirates", "monthlyAvg": [{"high": 24, "low": 15, "dryDays": 26, "snowDays": 0, "rainfall": 8.1}, {"high": 25, "low": 16, "dryDays": 24, "snowDays": 0, "rainfall": 2.6}, {"high": 28, "low": 18, "dryDays": 26, "snowDays": 0, "rainfall": 5.2}, {"high": 33, "low": 21, "dryDays": 28, "snowDays": 0, "rainfall": 1.2}, {"high": 38, "low": 25, "dryDays": 31, "snowDays": 0, "rainfall": 3.8}, {"high": 40, "low": 28, "dryDays": 30, "snowDays": 0, "rainfall": 0}, {"high": 41, "low": 30, "dryDays": 31, "snowDays": 0, "rainfall": 0}, {"high": 41, "low": 31, "dryDays": 31, "snowDays": 0, "rainfall": 1.5}, {"high": 39, "low": 28, "dryDays": 30, "snowDays": 0, "rainfall": 1.3}, {"high": 36, "low": 24, "dryDays": 31, "snowDays": 0, "rainfall": 1.6}, {"high": 31, "low": 20, "dryDays": 28, "snowDays": 0, "rainfall": 1.7}, {"high": 26, "low": 17, "dryDays": 28, "snowDays": 0, "rainfall": 7.5}]}, {"id": 29, "city": "Dublin", "country": "Ireland", "monthlyAvg": [{"high": 7, "low": 2, "dryDays": 11, "snowDays": 0, "rainfall": 90.5}, {"high": 8, "low": 2, "dryDays": 10, "snowDays": 0, "rainfall": 67.6}, {"high": 9, "low": 3, "dryDays": 13, "snowDays": 0, "rainfall": 66.9}, {"high": 11, "low": 4, "dryDays": 12, "snowDays": 0, "rainfall": 69}, {"high": 15, "low": 7, "dryDays": 16, "snowDays": 0, "rainfall": 57.4}, {"high": 17, "low": 9, "dryDays": 14, "snowDays": 0, "rainfall": 54.6}, {"high": 19, "low": 11, "dryDays": 14, "snowDays": 0, "rainfall": 61.3}, {"high": 18, "low": 11, "dryDays": 14, "snowDays": 0, "rainfall": 69}, {"high": 16, "low": 9, "dryDays": 14, "snowDays": 0, "rainfall": 59.8}, {"high": 13, "low": 7, "dryDays": 11, "snowDays": 0, "rainfall": 96.6}, {"high": 9, "low": 4, "dryDays": 9, "snowDays": 0, "rainfall": 83.1}, {"high": 7, "low": 2, "dryDays": 11, "snowDays": 0, "rainfall": 93.5}]}, {"id": 30, "city": "Granada", "country": "Spain", "monthlyAvg": [{"high": 11, "low": 3, "dryDays": 23, "snowDays": 0, "rainfall": 42}, {"high": 12, "low": 4, "dryDays": 19, "snowDays": 0, "rainfall": 39}, {"high": 15, "low": 6, "dryDays": 23, "snowDays": 0, "rainfall": 33}, {"high": 16, "low": 6, "dryDays": 18, "snowDays": 0, "rainfall": 42}, {"high": 19, "low": 10, "dryDays": 22, "snowDays": 0, "rainfall": 39}, {"high": 25, "low": 14, "dryDays": 25, "snowDays": 0, "rainfall": 9}, {"high": 28, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 3}, {"high": 29, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 6}, {"high": 26, "low": 15, "dryDays": 26, "snowDays": 0, "rainfall": 15}, {"high": 20, "low": 10, "dryDays": 22, "snowDays": 0, "rainfall": 33}, {"high": 15, "low": 7, "dryDays": 20, "snowDays": 0, "rainfall": 60}, {"high": 12, "low": 5, "dryDays": 21, "snowDays": 0, "rainfall": 39}]}, {"id": 31, "city": "Halifax", "country": "Canada", "monthlyAvg": [{"high": 1, "low": -7, "dryDays": 28, "snowDays": 0, "rainfall": 16.1}, {"high": 0, "low": -8, "dryDays": 27, "snowDays": 0, "rainfall": 5.1}, {"high": 2, "low": -4, "dryDays": 29, "snowDays": 0, "rainfall": 14.6}, {"high": 5, "low": 0, "dryDays": 26, "snowDays": 0, "rainfall": 16.8}, {"high": 9, "low": 4, "dryDays": 27, "snowDays": 0, "rainfall": 20.6}, {"high": 14, "low": 8, "dryDays": 26, "snowDays": 0, "rainfall": 27}, {"high": 17, "low": 12, "dryDays": 26, "snowDays": 0, "rainfall": 41.7}, {"high": 19, "low": 14, "dryDays": 27, "snowDays": 0, "rainfall": 21.1}, {"high": 18, "low": 12, "dryDays": 26, "snowDays": 0, "rainfall": 27}, {"high": 13, "low": 8, "dryDays": 27, "snowDays": 0, "rainfall": 35.5}, {"high": 9, "low": 3, "dryDays": 25, "snowDays": 0, "rainfall": 30.2}, {"high": 4, "low": 3, "dryDays": 28, "snowDays": 0, "rainfall": 27.6}]}, {"id": 32, "city": "Hanoi", "country": "Vietnam", "monthlyAvg": [{"high": 20, "low": 14, "dryDays": 17, "snowDays": 0, "rainfall": 26}, {"high": 21, "low": 15, "dryDays": 12, "snowDays": 0, "rainfall": 25.1}, {"high": 23, "low": 18, "dryDays": 10, "snowDays": 0, "rainfall": 46.9}, {"high": 28, "low": 22, "dryDays": 12, "snowDays": 0, "rainfall": 92.5}, {"high": 32, "low": 24, "dryDays": 12, "snowDays": 0, "rainfall": 154.8}, {"high": 34, "low": 26, "dryDays": 12, "snowDays": 0, "rainfall": 181.7}, {"high": 33, "low": 26, "dryDays": 12, "snowDays": 0, "rainfall": 221.3}, {"high": 33, "low": 26, "dryDays": 13, "snowDays": 0, "rainfall": 234.2}, {"high": 32, "low": 25, "dryDays": 15, "snowDays": 0, "rainfall": 137}, {"high": 30, "low": 22, "dryDays": 19, "snowDays": 0, "rainfall": 96.4}, {"high": 26, "low": 18, "dryDays": 21, "snowDays": 0, "rainfall": 59}, {"high": 23, "low": 15, "dryDays": 21, "snowDays": 0, "rainfall": 21.6}]}, {"id": 33, "city": "Ho Chi Minh City", "country": "Vietnam", "monthlyAvg": [{"high": 33, "low": 22, "dryDays": 29, "snowDays": 0, "rainfall": 8.5}, {"high": 33, "low": 22, "dryDays": 27, "snowDays": 0, "rainfall": 11.5}, {"high": 34, "low": 24, "dryDays": 28, "snowDays": 0, "rainfall": 40.1}, {"high": 35, "low": 26, "dryDays": 24, "snowDays": 0, "rainfall": 34.1}, {"high": 34, "low": 25, "dryDays": 15, "snowDays": 0, "rainfall": 160.4}, {"high": 33, "low": 25, "dryDays": 10, "snowDays": 0, "rainfall": 205.2}, {"high": 33, "low": 24, "dryDays": 8, "snowDays": 0, "rainfall": 161.9}, {"high": 32, "low": 24, "dryDays": 10, "snowDays": 0, "rainfall": 184.3}, {"high": 32, "low": 24, "dryDays": 9, "snowDays": 0, "rainfall": 158}, {"high": 32, "low": 24, "dryDays": 8, "snowDays": 0, "rainfall": 211.1}, {"high": 32, "low": 23, "dryDays": 17, "snowDays": 0, "rainfall": 92.7}, {"high": 32, "low": 22, "dryDays": 24, "snowDays": 0, "rainfall": 32.8}]}, {"id": 34, "city": "Hong Kong", "country": "Hong Kong", "monthlyAvg": [{"high": 18, "low": 12, "dryDays": 22, "snowDays": 0, "rainfall": 14}, {"high": 19, "low": 13, "dryDays": 18, "snowDays": 0, "rainfall": 11.3}, {"high": 21, "low": 16, "dryDays": 19, "snowDays": 0, "rainfall": 35.4}, {"high": 25, "low": 20, "dryDays": 16, "snowDays": 0, "rainfall": 83.4}, {"high": 29, "low": 24, "dryDays": 16, "snowDays": 0, "rainfall": 122.4}, {"high": 31, "low": 26, "dryDays": 12, "snowDays": 0, "rainfall": 222.6}, {"high": 32, "low": 26, "dryDays": 17, "snowDays": 0, "rainfall": 138.1}, {"high": 32, "low": 26, "dryDays": 17, "snowDays": 0, "rainfall": 164.6}, {"high": 31, "low": 25, "dryDays": 18, "snowDays": 0, "rainfall": 124.9}, {"high": 28, "low": 23, "dryDays": 24, "snowDays": 0, "rainfall": 35.2}, {"high": 25, "low": 18, "dryDays": 23, "snowDays": 0, "rainfall": 17.6}, {"high": 21, "low": 14, "dryDays": 25, "snowDays": 0, "rainfall": 18.1}]}, {"id": 35, "city": "Honolulu", "country": "Hawaii", "monthlyAvg": [{"high": 27, "low": 18, "dryDays": 17, "snowDays": 0, "rainfall": 61.2}, {"high": 27, "low": 18, "dryDays": 15, "snowDays": 0, "rainfall": 46}, {"high": 28, "low": 19, "dryDays": 15, "snowDays": 0, "rainfall": 53.2}, {"high": 28, "low": 20, "dryDays": 17, "snowDays": 0, "rainfall": 18}, {"high": 29, "low": 20, "dryDays": 21, "snowDays": 0, "rainfall": 27.6}, {"high": 31, "low": 22, "dryDays": 22, "snowDays": 0, "rainfall": 5.4}, {"high": 31, "low": 22, "dryDays": 22, "snowDays": 0, "rainfall": 3.2}, {"high": 31, "low": 22, "dryDays": 23, "snowDays": 0, "rainfall": 12.9}, {"high": 31, "low": 22, "dryDays": 19, "snowDays": 0, "rainfall": 13.7}, {"high": 30, "low": 22, "dryDays": 20, "snowDays": 0, "rainfall": 20.2}, {"high": 29, "low": 21, "dryDays": 17, "snowDays": 0, "rainfall": 41.4}, {"high": 28, "low": 19, "dryDays": 20, "snowDays": 0, "rainfall": 44.5}]}, {"id": 36, "city": "Istanbul", "country": "Turkey", "monthlyAvg": [{"high": 9, "low": 1, "dryDays": 17, "snowDays": 4, "rainfall": 65.5}, {"high": 11, "low": 1, "dryDays": 15, "snowDays": 4, "rainfall": 68.1}, {"high": 14, "low": 4, "dryDays": 18, "snowDays": 2, "rainfall": 63.7}, {"high": 19, "low": 7, "dryDays": 17, "snowDays": 0, "rainfall": 75.3}, {"high": 24, "low": 11, "dryDays": 22, "snowDays": 0, "rainfall": 52.7}, {"high": 29, "low": 16, "dryDays": 23, "snowDays": 0, "rainfall": 31.9}, {"high": 31, "low": 18, "dryDays": 27, "snowDays": 0, "rainfall": 23.1}, {"high": 32, "low": 18, "dryDays": 27, "snowDays": 0, "rainfall": 16.5}, {"high": 27, "low": 14, "dryDays": 23, "snowDays": 0, "rainfall": 46.5}, {"high": 22, "low": 10, "dryDays": 20, "snowDays": 0, "rainfall": 80.5}, {"high": 16, "low": 6, "dryDays": 17, "snowDays": 1, "rainfall": 88.6}, {"high": 11, "low": 3, "dryDays": 15, "snowDays": 3, "rainfall": 82.8}]}, {"id": 37, "city": "Jakarta", "country": "Indonesia", "monthlyAvg": [{"high": 31, "low": 24, "dryDays": 21, "snowDays": 0, "rainfall": 98.2}, {"high": 31, "low": 24, "dryDays": 17, "snowDays": 0, "rainfall": 84.3}, {"high": 32, "low": 24, "dryDays": 20, "snowDays": 0, "rainfall": 75.5}, {"high": 32, "low": 24, "dryDays": 22, "snowDays": 0, "rainfall": 83.8}, {"high": 33, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 52.7}, {"high": 32, "low": 24, "dryDays": 27, "snowDays": 0, "rainfall": 46.69}, {"high": 32, "low": 23, "dryDays": 28, "snowDays": 0, "rainfall": 31.4}, {"high": 32, "low": 23, "dryDays": 29, "snowDays": 0, "rainfall": 50.2}, {"high": 33, "low": 4, "dryDays": 27, "snowDays": 0, "rainfall": 26}, {"high": 33, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 49.6}, {"high": 32, "low": 24, "dryDays": 20, "snowDays": 0, "rainfall": 89.6}, {"high": 32, "low": 24, "dryDays": 21, "snowDays": 0, "rainfall": 72.6}]}, {"id": 38, "city": "Jerusalem", "country": "Israel", "monthlyAvg": [{"high": 12, "low": 5, "dryDays": 18, "snowDays": 1, "rainfall": 83.4}, {"high": 13, "low": 5, "dryDays": 16, "snowDays": 1, "rainfall": 77.6}, {"high": 16, "low": 7, "dryDays": 23, "snowDays": 0, "rainfall": 44.9}, {"high": 22, "low": 10, "dryDays": 26, "snowDays": 0, "rainfall": 15.3}, {"high": 26, "low": 14, "dryDays": 29, "snowDays": 0, "rainfall": 7.5}, {"high": 28, "low": 17, "dryDays": 30, "snowDays": 0, "rainfall": 1.5}, {"high": 30, "low": 19, "dryDays": 31, "snowDays": 90, "rainfall": 9.5}, {"high": 30, "low": 19, "dryDays": 31, "snowDays": 0, "rainfall": 0}, {"high": 28, "low": 17, "dryDays": 30, "snowDays": 0, "rainfall": 0}, {"high": 26, "low": 15, "dryDays": 27, "snowDays": 0, "rainfall": 8}, {"high": 20, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 26.8}, {"high": 15, "low": 7, "dryDays": 20, "snowDays": 1, "rainfall": 71.2}]}, {"id": 39, "city": "Johannesburg", "country": "South Africa", "monthlyAvg": [{"high": 26, "low": 14, "dryDays": 12, "snowDays": 0, "rainfall": 128.4}, {"high": 26, "low": 14, "dryDays": 13, "snowDays": 0, "rainfall": 143.5}, {"high": 25, "low": 13, "dryDays": 16, "snowDays": 0, "rainfall": 102}, {"high": 23, "low": 10, "dryDays": 20, "snowDays": 0, "rainfall": 39.6}, {"high": 20, "low": 6, "dryDays": 26, "snowDays": 0, "rainfall": 25.1}, {"high": 18, "low": 3, "dryDays": 27, "snowDays": 0, "rainfall": 11.6}, {"high": 18, "low": 3, "dryDays": 30, "snowDays": 0, "rainfall": 4}, {"high": 21, "low": 5, "dryDays": 28, "snowDays": 0, "rainfall": 14.1}, {"high": 25, "low": 9, "dryDays": 25, "snowDays": 10, "rainfall": 19.6}, {"high": 26, "low": 11, "dryDays": 16, "snowDays": 0, "rainfall": 78.9}, {"high": 26, "low": 12, "dryDays": 12, "snowDays": 0, "rainfall": 99.3}, {"high": 26, "low": 14, "dryDays": 10, "snowDays": 0, "rainfall": 151}]}, {"id": 40, "city": "Kansas City MO", "country": "United States", "monthlyAvg": [{"high": 6, "low": -5, "dryDays": 24, "snowDays": null, "rainfall": 29.4}, {"high": 6, "low": -5, "dryDays": 21, "snowDays": null, "rainfall": 30.7}, {"high": 14, "low": 1, "dryDays": 22, "snowDays": null, "rainfall": 76.7}, {"high": 20, "low": 7, "dryDays": 20, "snowDays": null, "rainfall": 86.4}, {"high": 25, "low": 12, "dryDays": 18, "snowDays": 0, "rainfall": 114.7}, {"high": 29, "low": 17, "dryDays": 19, "snowDays": 0, "rainfall": 124.1}, {"high": 32, "low": 20, "dryDays": 21, "snowDays": 0, "rainfall": 80.9}, {"high": 31, "low": 19, "dryDays": 19, "snowDays": 0, "rainfall": 119}, {"high": 27, "low": 13, "dryDays": 20, "snowDays": 0, "rainfall": 84.8}, {"high": 20, "low": 8, "dryDays": 20, "snowDays": null, "rainfall": 77.9}, {"high": 14, "low": 2, "dryDays": 24, "snowDays": null, "rainfall": 31.2}, {"high": 7, "low": -3, "dryDays": 24, "snowDays": null, "rainfall": 44.2}]}, {"id": 41, "city": "Kolkata", "country": "India", "monthlyAvg": [{"high": 23, "low": 10, "dryDays": 28, "snowDays": 0, "rainfall": 0}, {"high": 27, "low": 12, "dryDays": 23, "snowDays": 0, "rainfall": 3}, {"high": 29, "low": 16, "dryDays": 25, "snowDays": 0, "rainfall": 12}, {"high": 30, "low": 18, "dryDays": 23, "snowDays": 0, "rainfall": 24}, {"high": 30, "low": 16, "dryDays": 19, "snowDays": 0, "rainfall": 48}, {"high": 29, "low": 20, "dryDays": 14, "snowDays": 0, "rainfall": 138}, {"high": 28, "low": 19, "dryDays": 12, "snowDays": 0, "rainfall": 90}, {"high": 28, "low": 20, "dryDays": 10, "snowDays": 0, "rainfall": 66}, {"high": 29, "low": 18, "dryDays": 13, "snowDays": 0, "rainfall": 81}, {"high": 29, "low": 19, "dryDays": 21, "snowDays": 0, "rainfall": 30}, {"high": 27, "low": 15, "dryDays": 27, "snowDays": 0, "rainfall": 3}, {"high": 24, "low": 12, "dryDays": 29, "snowDays": 0, "rainfall": 3}]}, {"id": 42, "city": "Kuala Lumpur", "country": "Malaysia", "monthlyAvg": [{"high": 33, "low": 23, "dryDays": 12, "snowDays": 0, "rainfall": 238.8}, {"high": 33, "low": 24, "dryDays": 11, "snowDays": 0, "rainfall": 182.2}, {"high": 34, "low": 24, "dryDays": 11, "snowDays": 0, "rainfall": 259.2}, {"high": 33, "low": 24, "dryDays": 7, "snowDays": 0, "rainfall": 281.1}, {"high": 33, "low": 25, "dryDays": 11, "snowDays": 0, "rainfall": 186.1}, {"high": 33, "low": 24, "dryDays": 12, "snowDays": 0, "rainfall": 139.4}, {"high": 33, "low": 24, "dryDays": 14, "snowDays": 0, "rainfall": 160}, {"high": 33, "low": 24, "dryDays": 12, "snowDays": 0, "rainfall": 156.7}, {"high": 33, "low": 24, "dryDays": 10, "snowDays": 0, "rainfall": 211.4}, {"high": 32, "low": 24, "dryDays": 6, "snowDays": 0, "rainfall": 285.9}, {"high": 32, "low": 24, "dryDays": 3, "snowDays": 0, "rainfall": 333}, {"high": 32, "low": 24, "dryDays": 7, "snowDays": 0, "rainfall": 254.5}]}, {"id": 43, "city": "Las Vegas NV", "country": "United States", "monthlyAvg": [{"high": 15, "low": 3, "dryDays": 25, "snowDays": 0, "rainfall": 14.9}, {"high": 18, "low": 5, "dryDays": 21, "snowDays": 0, "rainfall": 23.9}, {"high": 23, "low": 9, "dryDays": 25, "snowDays": 0, "rainfall": 13.3}, {"high": 27, "low": 12, "dryDays": 27, "snowDays": 0, "rainfall": 3.6}, {"high": 33, "low": 17, "dryDays": 28, "snowDays": 0, "rainfall": 1.9}, {"high": 38, "low": 22, "dryDays": 28, "snowDays": 0, "rainfall": 2.2}, {"high": 41, "low": 26, "dryDays": 26, "snowDays": 0, "rainfall": 9.4}, {"high": 40, "low": 26, "dryDays": 25, "snowDays": 0, "rainfall": 9.1}, {"high": 36, "low": 21, "dryDays": 27, "snowDays": 0, "rainfall": 6.7}, {"high": 28, "low": 14, "dryDays": 28, "snowDays": 0, "rainfall": 8.1}, {"high": 20, "low": 7, "dryDays": 27, "snowDays": 0, "rainfall": 8.2}, {"high": 15, "low": 2, "dryDays": 27, "snowDays": 0, "rainfall": 12}]}, {"id": 44, "city": "Lisbon", "country": "Portugal", "monthlyAvg": [{"high": 14, "low": 10, "dryDays": 19, "snowDays": 0, "rainfall": 57}, {"high": 14, "low": 10, "dryDays": 15, "snowDays": 0, "rainfall": 81}, {"high": 15, "low": 11, "dryDays": 22, "snowDays": 0, "rainfall": 30}, {"high": 16, "low": 12, "dryDays": 20, "snowDays": 0, "rainfall": 48}, {"high": 17, "low": 13, "dryDays": 23, "snowDays": 0, "rainfall": 33}, {"high": 18, "low": 15, "dryDays": 25, "snowDays": 0, "rainfall": 18}, {"high": 19, "low": 16, "dryDays": 28, "snowDays": 0, "rainfall": 3}, {"high": 20, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 6}, {"high": 20, "low": 16, "dryDays": 25, "snowDays": 0, "rainfall": 21}, {"high": 18, "low": 14, "dryDays": 21, "snowDays": 0, "rainfall": 57}, {"high": 16, "low": 12, "dryDays": 19, "snowDays": 0, "rainfall": 69}, {"high": 15, "low": 11, "dryDays": 18, "snowDays": 0, "rainfall": 72}]}, {"id": 45, "city": "London", "country": "United Kingdom", "monthlyAvg": [{"high": 9, "low": 5, "dryDays": 8, "snowDays": 2, "rainfall": 52.2}, {"high": 10, "low": 5, "dryDays": 10, "snowDays": 3, "rainfall": 38.9}, {"high": 12, "low": 6, "dryDays": 12, "snowDays": 2, "rainfall": 34.7}, {"high": 15, "low": 7, "dryDays": 13, "snowDays": 0, "rainfall": 43.3}, {"high": 18, "low": 10, "dryDays": 14, "snowDays": 0, "rainfall": 50.5}, {"high": 21, "low": 13, "dryDays": 15, "snowDays": 0, "rainfall": 42.7}, {"high": 23, "low": 15, "dryDays": 14, "snowDays": 0, "rainfall": 40.7}, {"high": 23, "low": 15, "dryDays": 15, "snowDays": 0, "rainfall": 48.4}, {"high": 20, "low": 13, "dryDays": 14, "snowDays": 0, "rainfall": 49.4}, {"high": 16, "low": 10, "dryDays": 13, "snowDays": 0, "rainfall": 70.8}, {"high": 12, "low": 7, "dryDays": 9, "snowDays": 0, "rainfall": 62.8}, {"high": 9, "low": 5, "dryDays": 11, "snowDays": 2, "rainfall": 53.2}]}, {"id": 46, "city": "Los Angeles CA", "country": "United States", "monthlyAvg": [{"high": 20, "low": 9, "dryDays": 21, "snowDays": 0, "rainfall": 77}, {"high": 19, "low": 9, "dryDays": 18, "snowDays": 0, "rainfall": 97.3}, {"high": 19, "low": 11, "dryDays": 22, "snowDays": 0, "rainfall": 45.9}, {"high": 21, "low": 12, "dryDays": 25, "snowDays": 0, "rainfall": 17.2}, {"high": 21, "low": 14, "dryDays": 27, "snowDays": 0, "rainfall": 9.2}, {"high": 23, "low": 16, "dryDays": 28, "snowDays": 0, "rainfall": 2.6}, {"high": 24, "low": 18, "dryDays": 29, "snowDays": 0, "rainfall": 1.4}, {"high": 25, "low": 18, "dryDays": 30, "snowDays": 0, "rainfall": 0.2}, {"high": 25, "low": 17, "dryDays": 28, "snowDays": 0, "rainfall": 2.4}, {"high": 24, "low": 15, "dryDays": 27, "snowDays": 0, "rainfall": 11}, {"high": 22, "low": 11, "dryDays": 25, "snowDays": 0, "rainfall": 18.2}, {"high": 20, "low": 9, "dryDays": 23, "snowDays": 0, "rainfall": 46.8}]}, {"id": 47, "city": "Madrid", "country": "Spain", "monthlyAvg": [{"high": 11, "low": 2, "dryDays": 21, "snowDays": 1, "rainfall": 36}, {"high": 13, "low": 3, "dryDays": 21, "snowDays": 1, "rainfall": 26.6}, {"high": 17, "low": 5, "dryDays": 22, "snowDays": 0, "rainfall": 28.6}, {"high": 18, "low": 7, "dryDays": 19, "snowDays": 0, "rainfall": 38.2}, {"high": 23, "low": 11, "dryDays": 19, "snowDays": 0, "rainfall": 51}, {"high": 29, "low": 16, "dryDays": 25, "snowDays": 0, "rainfall": 15.1}, {"high": 33, "low": 18, "dryDays": 28, "snowDays": 0, "rainfall": 10.1}, {"high": 32, "low": 18, "dryDays": 27, "snowDays": 0, "rainfall": 8.5}, {"high": 27, "low": 15, "dryDays": 23, "snowDays": 0, "rainfall": 25.5}, {"high": 20, "low": 10, "dryDays": 19, "snowDays": 0, "rainfall": 64.5}, {"high": 14, "low": 5, "dryDays": 20, "snowDays": 0, "rainfall": 57.8}, {"high": 11, "low": 3, "dryDays": 19, "snowDays": 1, "rainfall": 50.9}]}, {"id": 48, "city": "Marseille", "country": "France", "monthlyAvg": [{"high": 12, "low": 3, "dryDays": 19, "snowDays": 1, "rainfall": 41.9}, {"high": 13, "low": 4, "dryDays": 19, "snowDays": 0, "rainfall": 27.1}, {"high": 17, "low": 6, "dryDays": 22, "snowDays": 0, "rainfall": 23.2}, {"high": 19, "low": 9, "dryDays": 18, "snowDays": 0, "rainfall": 54.5}, {"high": 24, "low": 13, "dryDays": 21, "snowDays": 0, "rainfall": 37.6}, {"high": 28, "low": 17, "dryDays": 23, "snowDays": 0, "rainfall": 21.7}, {"high": 30, "low": 19, "dryDays": 27, "snowDays": 0, "rainfall": 6}, {"high": 30, "low": 19, "dryDays": 24, "snowDays": 0, "rainfall": 21.6}, {"high": 26, "low": 16, "dryDays": 20, "snowDays": 0, "rainfall": 82.3}, {"high": 21, "low": 12, "dryDays": 16, "snowDays": 0, "rainfall": 63.7}, {"high": 15, "low": 7, "dryDays": 16, "snowDays": 0, "rainfall": 59.9}, {"high": 12, "low": 4, "dryDays": 18, "snowDays": 0, "rainfall": 36.7}]}, {"id": 49, "city": "Melbourne", "country": "Australia", "monthlyAvg": [{"high": 25, "low": 14, "dryDays": 22, "snowDays": 0, "rainfall": 39.8}, {"high": 26, "low": 14, "dryDays": 21, "snowDays": 0, "rainfall": 35}, {"high": 24, "low": 12, "dryDays": 23, "snowDays": 0, "rainfall": 36.8}, {"high": 20, "low": 9, "dryDays": 20, "snowDays": 0, "rainfall": 42}, {"high": 17, "low": 7, "dryDays": 21, "snowDays": 0, "rainfall": 27.9}, {"high": 15, "low": 6, "dryDays": 16, "snowDays": 0, "rainfall": 38.3}, {"high": 14, "low": 5, "dryDays": 17, "snowDays": 0, "rainfall": 34.9}, {"high": 15, "low": 5, "dryDays": 17, "snowDays": 0, "rainfall": 34.8}, {"high": 17, "low": 6, "dryDays": 15, "snowDays": 0, "rainfall": 43.4}, {"high": 20, "low": 8, "dryDays": 18, "snowDays": 0, "rainfall": 49.3}, {"high": 22, "low": 10, "dryDays": 19, "snowDays": 0, "rainfall": 44.3}, {"high": 24, "low": 12, "dryDays": 21, "snowDays": 0, "rainfall": 42.6}]}, {"id": 50, "city": "Mexico City", "country": "Mexico", "monthlyAvg": [{"high": 22, "low": 6, "dryDays": 30, "snowDays": 0, "rainfall": 31.7}, {"high": 24, "low": 8, "dryDays": 27, "snowDays": 0, "rainfall": 5.3}, {"high": 26, "low": 9, "dryDays": 29, "snowDays": 0, "rainfall": 55.2}, {"high": 27, "low": 12, "dryDays": 28, "snowDays": 0, "rainfall": 69.8}, {"high": 27, "low": 13, "dryDays": 29, "snowDays": 0, "rainfall": 62.3}, {"high": 25, "low": 14, "dryDays": 26, "snowDays": 0, "rainfall": 343}, {"high": 24, "low": 13, "dryDays": 25, "snowDays": 0, "rainfall": 193.7}, {"high": 24, "low": 13, "dryDays": 25, "snowDays": 0, "rainfall": 224.9}, {"high": 23, "low": 13, "dryDays": 23, "snowDays": 0, "rainfall": 309.5}, {"high": 23, "low": 11, "dryDays": 27, "snowDays": 0, "rainfall": 179.8}, {"high": 22, "low": 8, "dryDays": 28, "snowDays": 0, "rainfall": 56.9}, {"high": 22, "low": 6, "dryDays": 30, "snowDays": 0, "rainfall": 0.7}]}, {"id": 51, "city": "Miami FL", "country": "United States", "monthlyAvg": [{"high": 26, "low": 16, "dryDays": 20, "snowDays": 0, "rainfall": 43.7}, {"high": 26, "low": 16, "dryDays": 19, "snowDays": 0, "rainfall": 53}, {"high": 28, "low": 18, "dryDays": 21, "snowDays": 0, "rainfall": 66.6}, {"high": 29, "low": 20, "dryDays": 20, "snowDays": 0, "rainfall": 82.3}, {"high": 31, "low": 22, "dryDays": 17, "snowDays": 0, "rainfall": 130.1}, {"high": 32, "low": 24, "dryDays": 7, "snowDays": 0, "rainfall": 264.7}, {"high": 33, "low": 25, "dryDays": 9, "snowDays": 0, "rainfall": 161.5}, {"high": 33, "low": 25, "dryDays": 7, "snowDays": 0, "rainfall": 241.5}, {"high": 32, "low": 25, "dryDays": 7, "snowDays": 0, "rainfall": 261.6}, {"high": 30, "low": 23, "dryDays": 13, "snowDays": 0, "rainfall": 202.3}, {"high": 28, "low": 20, "dryDays": 18, "snowDays": 0, "rainfall": 98.7}, {"high": 26, "low": 17, "dryDays": 19, "snowDays": 0, "rainfall": 54.7}]}, {"id": 52, "city": "Montreal", "country": "Canada", "monthlyAvg": [{"high": -4, "low": -14, "dryDays": 14, "snowDays": 21, "rainfall": 80.1}, {"high": -2, "low": -13, "dryDays": 14, "snowDays": 16, "rainfall": 60.1}, {"high": 3, "low": -7, "dryDays": 14, "snowDays": 14, "rainfall": 61.3}, {"high": 12, "low": 0, "dryDays": 12, "snowDays": 5, "rainfall": 75.2}, {"high": 20, "low": 7, "dryDays": 10, "snowDays": 0, "rainfall": 99}, {"high": 26, "low": 13, "dryDays": 10, "snowDays": 0, "rainfall": 80.5}, {"high": 27, "low": 15, "dryDays": 9, "snowDays": 0, "rainfall": 104.3}, {"high": 26, "low": 14, "dryDays": 12, "snowDays": 0, "rainfall": 86.9}, {"high": 22, "low": 10, "dryDays": 12, "snowDays": 0, "rainfall": 90.5}, {"high": 14, "low": 4, "dryDays": 12, "snowDays": 1, "rainfall": 92.2}, {"high": 7, "low": -2, "dryDays": 11, "snowDays": 9, "rainfall": 81}, {"high": 0, "low": -9, "dryDays": 13, "snowDays": 18, "rainfall": 87.8}]}, {"id": 53, "city": "Moscow", "country": "Russia", "monthlyAvg": [{"high": -4, "low": -9, "dryDays": 10, "snowDays": 23, "rainfall": 44.7}, {"high": -4, "low": -11, "dryDays": 12, "snowDays": 20, "rainfall": 45.1}, {"high": 3, "low": -6, "dryDays": 16, "snowDays": 14, "rainfall": 32.5}, {"high": 11, "low": 1, "dryDays": 18, "snowDays": 4, "rainfall": 31.4}, {"high": 17, "low": 6, "dryDays": 15, "snowDays": 1, "rainfall": 57.9}, {"high": 22, "low": 11, "dryDays": 15, "snowDays": 0, "rainfall": 73.4}, {"high": 24, "low": 13, "dryDays": 17, "snowDays": 0, "rainfall": 78.8}, {"high": 22, "low": 11, "dryDays": 16, "snowDays": 0, "rainfall": 75}, {"high": 15, "low": 6, "dryDays": 15, "snowDays": 0, "rainfall": 62.3}, {"high": 8, "low": 2, "dryDays": 14, "snowDays": 4, "rainfall": 77.2}, {"high": 0, "low": -5, "dryDays": 12, "snowDays": 15, "rainfall": 45.3}, {"high": -3, "low": -8, "dryDays": 14, "snowDays": 21, "rainfall": 40.2}]}, {"id": 54, "city": "Mumbai", "country": "India", "monthlyAvg": [{"high": 31, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 1.3}, {"high": 32, "low": 18, "dryDays": 28, "snowDays": 0, "rainfall": 0.4}, {"high": 33, "low": 21, "dryDays": 31, "snowDays": 0, "rainfall": 6.2}, {"high": 33, "low": 24, "dryDays": 30, "snowDays": 0, "rainfall": 7}, {"high": 34, "low": 27, "dryDays": 27, "snowDays": 0, "rainfall": 26.6}, {"high": 32, "low": 26, "dryDays": 8, "snowDays": 0, "rainfall": 494.6}, {"high": 31, "low": 26, "dryDays": 2, "snowDays": 0, "rainfall": 735.8}, {"high": 30, "low": 25, "dryDays": 2, "snowDays": 0, "rainfall": 530.7}, {"high": 31, "low": 25, "dryDays": 8, "snowDays": 0, "rainfall": 348}, {"high": 34, "low": 24, "dryDays": 24, "snowDays": 0, "rainfall": 90.5}, {"high": 34, "low": 21, "dryDays": 29, "snowDays": 0, "rainfall": 5}, {"high": 33, "low": 18, "dryDays": 30, "snowDays": 0, "rainfall": 10.1}]}, {"id": 55, "city": "New Delhi", "country": "India", "monthlyAvg": [{"high": 20, "low": 8, "dryDays": 27, "snowDays": 0, "rainfall": 19.7}, {"high": 24, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 24.6}, {"high": 30, "low": 16, "dryDays": 26, "snowDays": 0, "rainfall": 24.6}, {"high": 37, "low": 21, "dryDays": 26, "snowDays": 0, "rainfall": 10.1}, {"high": 40, "low": 26, "dryDays": 24, "snowDays": 0, "rainfall": 40.7}, {"high": 38, "low": 28, "dryDays": 20, "snowDays": 0, "rainfall": 96.9}, {"high": 35, "low": 27, "dryDays": 15, "snowDays": 0, "rainfall": 190}, {"high": 34, "low": 27, "dryDays": 15, "snowDays": 0, "rainfall": 201}, {"high": 34, "low": 25, "dryDays": 20, "snowDays": 0, "rainfall": 134.3}, {"high": 33, "low": 19, "dryDays": 29, "snowDays": 0, "rainfall": 12}, {"high": 28, "low": 13, "dryDays": 29, "snowDays": 0, "rainfall": 4}, {"high": 23, "low": 8, "dryDays": 29, "snowDays": 0, "rainfall": 10}]}, {"id": 56, "city": "New Orleans LA", "country": "United States", "monthlyAvg": [{"high": 19, "low": 7, "dryDays": 16, "snowDays": 0, "rainfall": 163.7}, {"high": 20, "low": 8, "dryDays": 16, "snowDays": 0, "rainfall": 110.3}, {"high": 23, "low": 11, "dryDays": 19, "snowDays": 0, "rainfall": 129.4}, {"high": 26, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 113}, {"high": 30, "low": 19, "dryDays": 20, "snowDays": 0, "rainfall": 144}, {"high": 32, "low": 22, "dryDays": 13, "snowDays": 0, "rainfall": 198}, {"high": 33, "low": 24, "dryDays": 10, "snowDays": 0, "rainfall": 157.5}, {"high": 33, "low": 24, "dryDays": 13, "snowDays": 0, "rainfall": 128}, {"high": 31, "low": 22, "dryDays": 16, "snowDays": 0, "rainfall": 138.1}, {"high": 27, "low": 16, "dryDays": 20, "snowDays": 0, "rainfall": 82.5}, {"high": 23, "low": 11, "dryDays": 19, "snowDays": 0, "rainfall": 132}, {"high": 19, "low": 8, "dryDays": 18, "snowDays": 0, "rainfall": 112.8}]}, {"id": 57, "city": "New York City NY", "country": "United States", "monthlyAvg": [{"high": 6, "low": -3, "dryDays": 16, "snowDays": 8, "rainfall": 85.4}, {"high": 7, "low": -3, "dryDays": 15, "snowDays": 6, "rainfall": 57}, {"high": 10, "low": 0, "dryDays": 16, "snowDays": 5, "rainfall": 98.6}, {"high": 16, "low": 6, "dryDays": 13, "snowDays": 1, "rainfall": 95.9}, {"high": 21, "low": 11, "dryDays": 14, "snowDays": 0, "rainfall": 102.7}, {"high": 27, "low": 17, "dryDays": 15, "snowDays": 0, "rainfall": 98.1}, {"high": 29, "low": 20, "dryDays": 17, "snowDays": 0, "rainfall": 101.4}, {"high": 29, "low": 19, "dryDays": 18, "snowDays": 0, "rainfall": 113.6}, {"high": 25, "low": 16, "dryDays": 18, "snowDays": 0, "rainfall": 108.2}, {"high": 19, "low": 10, "dryDays": 19, "snowDays": 0, "rainfall": 96.9}, {"high": 13, "low": 4, "dryDays": 16, "snowDays": 1, "rainfall": 85.4}, {"high": 8, "low": -1, "dryDays": 16, "snowDays": 5, "rainfall": 87}]}, {"id": 58, "city": "Oakland CA", "country": "United States", "monthlyAvg": [{"high": 15, "low": 5, "dryDays": 19, "snowDays": 0, "rainfall": 110}, {"high": 16, "low": 6, "dryDays": 13, "snowDays": 1, "rainfall": 115}, {"high": 19, "low": 7, "dryDays": 22, "snowDays": 0, "rainfall": 80}, {"high": 19, "low": 8, "dryDays": 21, "snowDays": 0, "rainfall": 40}, {"high": 21, "low": 10, "dryDays": 26, "snowDays": 0, "rainfall": 20}, {"high": 23, "low": 12, "dryDays": 27, "snowDays": 0, "rainfall": 5}, {"high": 22, "low": 13, "dryDays": 29, "snowDays": 0, "rainfall": 0.8}, {"high": 23, "low": 13, "dryDays": 28, "snowDays": 0, "rainfall": 0.3}, {"high": 25, "low": 12, "dryDays": 27, "snowDays": 0, "rainfall": 2.9}, {"high": 22, "low": 10, "dryDays": 24, "snowDays": 0, "rainfall": 30}, {"high": 18, "low": 7, "dryDays": 19, "snowDays": 0, "rainfall": 70}, {"high": 15, "low": 6, "dryDays": 16, "snowDays": 0, "rainfall": 119.8}]}, {"id": 59, "city": "Orlando FL", "country": "United States", "monthlyAvg": [{"high": 24, "low": 10, "dryDays": 21, "snowDays": 0, "rainfall": 60.2}, {"high": 25, "low": 11, "dryDays": 18, "snowDays": 0, "rainfall": 56.8}, {"high": 27, "low": 13, "dryDays": 20, "snowDays": 0, "rainfall": 83.1}, {"high": 29, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 72.3}, {"high": 32, "low": 19, "dryDays": 20, "snowDays": 0, "rainfall": 78.3}, {"high": 33, "low": 22, "dryDays": 8, "snowDays": 0, "rainfall": 210.4}, {"high": 34, "low": 23, "dryDays": 8, "snowDays": 0, "rainfall": 186.3}, {"high": 33, "low": 23, "dryDays": 7, "snowDays": 0, "rainfall": 190.8}, {"high": 32, "low": 23, "dryDays": 10, "snowDays": 0, "rainfall": 146.9}, {"high": 30, "low": 19, "dryDays": 18, "snowDays": 0, "rainfall": 96.9}, {"high": 26, "low": 14, "dryDays": 20, "snowDays": 0, "rainfall": 49.2}, {"high": 24, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 65.1}]}, {"id": 60, "city": "Osaka", "country": "Japan", "monthlyAvg": [{"high": 10, "low": 2, "dryDays": 15, "snowDays": 2, "rainfall": 51.4}, {"high": 11, "low": 2, "dryDays": 13, "snowDays": 3, "rainfall": 68.6}, {"high": 14, "low": 5, "dryDays": 15, "snowDays": 1, "rainfall": 101.7}, {"high": 20, "low": 10, "dryDays": 16, "snowDays": 0, "rainfall": 100.5}, {"high": 24, "low": 15, "dryDays": 16, "snowDays": 0, "rainfall": 181.1}, {"high": 27, "low": 20, "dryDays": 13, "snowDays": 0, "rainfall": 186.3}, {"high": 31, "low": 24, "dryDays": 17, "snowDays": 0, "rainfall": 136}, {"high": 33, "low": 25, "dryDays": 19, "snowDays": 0, "rainfall": 88.8}, {"high": 29, "low": 21, "dryDays": 15, "snowDays": 0, "rainfall": 201.7}, {"high": 23, "low": 15, "dryDays": 17, "snowDays": 0, "rainfall": 131.2}, {"high": 18, "low": 9, "dryDays": 18, "snowDays": 0, "rainfall": 94.8}, {"high": 13, "low": 5, "dryDays": 17, "snowDays": 1, "rainfall": 53.6}]}, {"id": 61, "city": "Oslo", "country": "Norway", "monthlyAvg": [{"high": 0, "low": -4, "dryDays": 15, "snowDays": 10, "rainfall": 55.6}, {"high": 2, "low": -4, "dryDays": 15, "snowDays": 10, "rainfall": 41.8}, {"high": 5, "low": -3, "dryDays": 21, "snowDays": 8, "rainfall": 37.7}, {"high": 10, "low": 2, "dryDays": 15, "snowDays": 3, "rainfall": 61.6}, {"high": 16, "low": 7, "dryDays": 16, "snowDays": 1, "rainfall": 64}, {"high": 20, "low": 11, "dryDays": 15, "snowDays": 0, "rainfall": 72.2}, {"high": 22, "low": 13, "dryDays": 13, "snowDays": 0, "rainfall": 87.4}, {"high": 22, "low": 13, "dryDays": 14, "snowDays": 0, "rainfall": 93.9}, {"high": 16, "low": 9, "dryDays": 15, "snowDays": 0, "rainfall": 83.9}, {"high": 10, "low": 4, "dryDays": 12, "snowDays": 1, "rainfall": 97.3}, {"high": 4, "low": 0, "dryDays": 12, "snowDays": 6, "rainfall": 82.1}, {"high": 1, "low": -4, "dryDays": 17, "snowDays": 10, "rainfall": 46.7}]}, {"id": 62, "city": "Ottawa", "country": "Canada", "monthlyAvg": [{"high": -7, "low": -18, "dryDays": 17, "snowDays": 0, "rainfall": 72}, {"high": -4, "low": -16, "dryDays": 18, "snowDays": null, "rainfall": 47.1}, {"high": 3, "low": -10, "dryDays": 20, "snowDays": null, "rainfall": 61.7}, {"high": 11, "low": -2, "dryDays": 19, "snowDays": null, "rainfall": 59.9}, {"high": 19, "low": 4, "dryDays": 20, "snowDays": null, "rainfall": 62.6}, {"high": 25, "low": 11, "dryDays": 18, "snowDays": 0, "rainfall": 82.7}, {"high": 26, "low": 12, "dryDays": 19, "snowDays": 0, "rainfall": 88.7}, {"high": 25, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 75.4}, {"high": 21, "low": 7, "dryDays": 20, "snowDays": 0, "rainfall": 84.3}, {"high": 13, "low": 2, "dryDays": 19, "snowDays": null, "rainfall": 83.5}, {"high": 5, "low": -4, "dryDays": 17, "snowDays": null, "rainfall": 92.5}, {"high": -3, "low": -13, "dryDays": 18, "snowDays": null, "rainfall": 69.2}]}, {"id": 63, "city": "Paris", "country": "France", "monthlyAvg": [{"high": 7, "low": 2, "dryDays": 16, "snowDays": 2, "rainfall": 22}, {"high": 8, "low": 1, "dryDays": 16, "snowDays": 3, "rainfall": 35.8}, {"high": 12, "low": 3, "dryDays": 18, "snowDays": 2, "rainfall": 30.1}, {"high": 15, "low": 5, "dryDays": 19, "snowDays": 1, "rainfall": 19.7}, {"high": 19, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 39.2}, {"high": 23, "low": 12, "dryDays": 20, "snowDays": 0, "rainfall": 27.3}, {"high": 24, "low": 13, "dryDays": 20, "snowDays": 0, "rainfall": 40.1}, {"high": 24, "low": 13, "dryDays": 19, "snowDays": 0, "rainfall": 49.4}, {"high": 21, "low": 11, "dryDays": 18, "snowDays": 0, "rainfall": 22.1}, {"high": 16, "low": 8, "dryDays": 16, "snowDays": 0, "rainfall": 46.9}, {"high": 10, "low": 4, "dryDays": 14, "snowDays": 1, "rainfall": 32.1}, {"high": 7, "low": 1, "dryDays": 17, "snowDays": 2, "rainfall": 30.8}]}, {"id": 64, "city": "Philadelphia PA", "country": "United States", "monthlyAvg": [{"high": 7, "low": -3, "dryDays": 15, "snowDays": 6, "rainfall": 81.8}, {"high": 8, "low": -3, "dryDays": 16, "snowDays": 6, "rainfall": 60}, {"high": 13, "low": 1, "dryDays": 15, "snowDays": 4, "rainfall": 106}, {"high": 19, "low": 6, "dryDays": 13, "snowDays": 1, "rainfall": 85}, {"high": 24, "low": 11, "dryDays": 15, "snowDays": 0, "rainfall": 90.5}, {"high": 29, "low": 17, "dryDays": 16, "snowDays": 0, "rainfall": 94}, {"high": 31, "low": 20, "dryDays": 16, "snowDays": 0, "rainfall": 114.1}, {"high": 30, "low": 20, "dryDays": 18, "snowDays": 0, "rainfall": 90.9}, {"high": 27, "low": 16, "dryDays": 17, "snowDays": 0, "rainfall": 109.2}, {"high": 21, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 85.5}, {"high": 15, "low": 4, "dryDays": 17, "snowDays": 1, "rainfall": 72.1}, {"high": 9, "low": -1, "dryDays": 16, "snowDays": 4, "rainfall": 90}]}, {"id": 65, "city": "Phoenix AZ", "country": "United States", "monthlyAvg": [{"high": 20, "low": 7, "dryDays": 24, "snowDays": 0, "rainfall": 28.1}, {"high": 22, "low": 9, "dryDays": 22, "snowDays": 0, "rainfall": 22.7}, {"high": 26, "low": 12, "dryDays": 25, "snowDays": 0, "rainfall": 28.7}, {"high": 31, "low": 15, "dryDays": 27, "snowDays": 0, "rainfall": 18.6}, {"high": 36, "low": 20, "dryDays": 29, "snowDays": 0, "rainfall": 5.3}, {"high": 41, "low": 25, "dryDays": 29, "snowDays": 0, "rainfall": 0.5}, {"high": 42, "low": 28, "dryDays": 25, "snowDays": 0, "rainfall": 20.1}, {"high": 41, "low": 28, "dryDays": 23, "snowDays": 0, "rainfall": 26}, {"high": 39, "low": 25, "dryDays": 25, "snowDays": 0, "rainfall": 16.2}, {"high": 33, "low": 18, "dryDays": 28, "snowDays": 0, "rainfall": 13.8}, {"high": 25, "low": 11, "dryDays": 27, "snowDays": 0, "rainfall": 14.3}, {"high": 20, "low": 7, "dryDays": 25, "snowDays": 0, "rainfall": 22.1}]}, {"id": 66, "city": "Phuket", "country": "Thailand", "monthlyAvg": [{"high": 31, "low": 21, "dryDays": 24, "snowDays": 0, "rainfall": 41.4}, {"high": 33, "low": 21, "dryDays": 25, "snowDays": 0, "rainfall": 13.2}, {"high": 34, "low": 22, "dryDays": 26, "snowDays": 0, "rainfall": 47.8}, {"high": 35, "low": 24, "dryDays": 22, "snowDays": 0, "rainfall": 69.2}, {"high": 34, "low": 24, "dryDays": 13, "snowDays": 0, "rainfall": 157.6}, {"high": 33, "low": 24, "dryDays": 13, "snowDays": 0, "rainfall": 126.9}, {"high": 33, "low": 23, "dryDays": 11, "snowDays": 0, "rainfall": 145.2}, {"high": 33, "low": 23, "dryDays": 13, "snowDays": 0, "rainfall": 128.1}, {"high": 33, "low": 23, "dryDays": 9, "snowDays": 0, "rainfall": 187.9}, {"high": 32, "low": 23, "dryDays": 8, "snowDays": 0, "rainfall": 254.7}, {"high": 30, "low": 23, "dryDays": 10, "snowDays": 0, "rainfall": 264.9}, {"high": 30, "low": 22, "dryDays": 17, "snowDays": 0, "rainfall": 160.2}]}, {"id": 67, "city": "Portland OR", "country": "United States", "monthlyAvg": [{"high": 10, "low": 2, "dryDays": 8, "snowDays": 3, "rainfall": 164.1}, {"high": 12, "low": 1, "dryDays": 10, "snowDays": 2, "rainfall": 110.9}, {"high": 15, "low": 3, "dryDays": 9, "snowDays": 1, "rainfall": 103}, {"high": 17, "low": 4, "dryDays": 10, "snowDays": 1, "rainfall": 71.9}, {"high": 21, "low": 7, "dryDays": 16, "snowDays": 0, "rainfall": 51.9}, {"high": 24, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 35.3}, {"high": 29, "low": 12, "dryDays": 26, "snowDays": 0, "rainfall": 7.9}, {"high": 29, "low": 11, "dryDays": 25, "snowDays": 0, "rainfall": 13.6}, {"high": 27, "low": 9, "dryDays": 22, "snowDays": 0, "rainfall": 25.8}, {"high": 19, "low": 6, "dryDays": 16, "snowDays": 0, "rainfall": 75.7}, {"high": 13, "low": 3, "dryDays": 9, "snowDays": 1, "rainfall": 144.1}, {"high": 9, "low": 1, "dryDays": 8, "snowDays": 3, "rainfall": 176.6}]}, {"id": 68, "city": "Porto", "country": "Portugal", "monthlyAvg": [{"high": 14, "low": 6, "dryDays": 16, "snowDays": 0, "rainfall": 140.9}, {"high": 15, "low": 7, "dryDays": 15, "snowDays": 0, "rainfall": 77.9}, {"high": 18, "low": 8, "dryDays": 18, "snowDays": 0, "rainfall": 97.2}, {"high": 18, "low": 9, "dryDays": 5, "snowDays": 0, "rainfall": 98.4}, {"high": 20, "low": 12, "dryDays": 17, "snowDays": 0, "rainfall": 90.2}, {"high": 23, "low": 14, "dryDays": 22, "snowDays": 0, "rainfall": 30.7}, {"high": 25, "low": 15, "dryDays": 24, "snowDays": 0, "rainfall": 17.4}, {"high": 25, "low": 15, "dryDays": 24, "snowDays": 0, "rainfall": 33.4}, {"high": 23, "low": 14, "dryDays": 20, "snowDays": 0, "rainfall": 73.7}, {"high": 21, "low": 12, "dryDays": 15, "snowDays": 0, "rainfall": 145.6}, {"high": 17, "low": 9, "dryDays": 14, "snowDays": 0, "rainfall": 159.9}, {"high": 15, "low": 7, "dryDays": 14, "snowDays": 0, "rainfall": 153.8}]}, {"id": 69, "city": "Prague", "country": "Czech Republic", "monthlyAvg": [{"high": 3, "low": -3, "dryDays": 15, "snowDays": 9, "rainfall": 21.8}, {"high": 5, "low": -2, "dryDays": 14, "snowDays": 9, "rainfall": 21.8}, {"high": 9, "low": 1, "dryDays": 14, "snowDays": 7, "rainfall": 31.3}, {"high": 14, "low": 4, "dryDays": 14, "snowDays": 2, "rainfall": 27.2}, {"high": 20, "low": 9, "dryDays": 14, "snowDays": 0, "rainfall": 49.9}, {"high": 23, "low": 12, "dryDays": 12, "snowDays": 0, "rainfall": 66.2}, {"high": 25, "low": 14, "dryDays": 14, "snowDays": 0, "rainfall": 61.3}, {"high": 25, "low": 13, "dryDays": 15, "snowDays": 0, "rainfall": 64.7}, {"high": 19, "low": 9, "dryDays": 16, "snowDays": 0, "rainfall": 41.3}, {"high": 14, "low": 5, "dryDays": 15, "snowDays": 0, "rainfall": 26.1}, {"high": 6, "low": 1, "dryDays": 12, "snowDays": 4, "rainfall": 31.7}, {"high": 3, "low": -2, "dryDays": 15, "snowDays": 9, "rainfall": 25.2}]}, {"id": 70, "city": "Quebec City", "country": "Canada", "monthlyAvg": [{"high": -6, "low": -16, "dryDays": 12, "snowDays": 20, "rainfall": 89.1}, {"high": -5, "low": -16, "dryDays": 13, "snowDays": 15, "rainfall": 64.5}, {"high": 1, "low": -9, "dryDays": 16, "snowDays": 13, "rainfall": 68.6}, {"high": 9, "low": -1, "dryDays": 14, "snowDays": 6, "rainfall": 88}, {"high": 19, "low": 5, "dryDays": 13, "snowDays": 1, "rainfall": 88}, {"high": 24, "low": 11, "dryDays": 12, "snowDays": 0, "rainfall": 108.9}, {"high": 26, "low": 14, "dryDays": 12, "snowDays": 0, "rainfall": 142}, {"high": 25, "low": 13, "dryDays": 13, "snowDays": 0, "rainfall": 101.7}, {"high": 20, "low": 8, "dryDays": 13, "snowDays": 0, "rainfall": 107.6}, {"high": 12, "low": 2, "dryDays": 13, "snowDays": 2, "rainfall": 110.2}, {"high": 4, "low": -4, "dryDays": 12, "snowDays": 11, "rainfall": 93.8}, {"high": -3, "low": -12, "dryDays": 13, "snowDays": 17, "rainfall": 83.5}]}, {"id": 71, "city": "Reykjavik", "country": "Iceland", "monthlyAvg": [{"high": 4, "low": -2, "dryDays": 21, "snowDays": 17, "rainfall": 67.5}, {"high": 3, "low": -3, "dryDays": 20, "snowDays": 18, "rainfall": 77.8}, {"high": 4, "low": -2, "dryDays": 21, "snowDays": 18, "rainfall": 93.9}, {"high": 6, "low": 1, "dryDays": 21, "snowDays": 10, "rainfall": 38.9}, {"high": 10, "low": 4, "dryDays": 20, "snowDays": 3, "rainfall": 35}, {"high": 13, "low": 7, "dryDays": 20, "snowDays": 0, "rainfall": 20.6}, {"high": 14, "low": 9, "dryDays": 21, "snowDays": 0, "rainfall": 26.1}, {"high": 14, "low": 8, "dryDays": 22, "snowDays": 0, "rainfall": 30.6}, {"high": 11, "low": 6, "dryDays": 22, "snowDays": 1, "rainfall": 40.9}, {"high": 8, "low": 3, "dryDays": 21, "snowDays": 6, "rainfall": 25.5}, {"high": 5, "low": 0, "dryDays": 22, "snowDays": 12, "rainfall": 58.8}, {"high": 4, "low": -2, "dryDays": 22, "snowDays": 17, "rainfall": 59.5}]}, {"id": 72, "city": "Rio de Janeiro", "country": "Brazil", "monthlyAvg": [{"high": 32, "low": 24, "dryDays": 27, "snowDays": 0, "rainfall": 7.3}, {"high": 33, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 13.8}, {"high": 32, "low": 23, "dryDays": 28, "snowDays": 0, "rainfall": 3.4}, {"high": 31, "low": 22, "dryDays": 27, "snowDays": 0, "rainfall": 3}, {"high": 28, "low": 19, "dryDays": 28, "snowDays": 0, "rainfall": 1.6}, {"high": 27, "low": 18, "dryDays": 28, "snowDays": 0, "rainfall": 0.7}, {"high": 27, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 2.4}, {"high": 28, "low": 18, "dryDays": 28, "snowDays": 0, "rainfall": 4.7}, {"high": 28, "low": 19, "dryDays": 26, "snowDays": 0, "rainfall": 9.6}, {"high": 29, "low": 21, "dryDays": 27, "snowDays": 0, "rainfall": 12.2}, {"high": 30, "low": 22, "dryDays": 26, "snowDays": 0, "rainfall": 12.4}, {"high": 32, "low": 23, "dryDays": 27, "snowDays": 0, "rainfall": 10.5}]}, {"id": 73, "city": "Rome", "country": "Italy", "monthlyAvg": [{"high": 13, "low": 3, "dryDays": 25, "snowDays": 0, "rainfall": 24.8}, {"high": 14, "low": 3, "dryDays": 24, "snowDays": 0, "rainfall": 20.5}, {"high": 17, "low": 6, "dryDays": 27, "snowDays": 0, "rainfall": 19.4}, {"high": 19, "low": 8, "dryDays": 25, "snowDays": 0, "rainfall": 27.5}, {"high": 24, "low": 13, "dryDays": 27, "snowDays": 0, "rainfall": 18.2}, {"high": 29, "low": 17, "dryDays": 28, "snowDays": 0, "rainfall": 5.5}, {"high": 32, "low": 19, "dryDays": 29, "snowDays": 0, "rainfall": 6.6}, {"high": 32, "low": 19, "dryDays": 29, "snowDays": 0, "rainfall": 16.1}, {"high": 27, "low": 16, "dryDays": 26, "snowDays": 0, "rainfall": 25.8}, {"high": 23, "low": 12, "dryDays": 26, "snowDays": 0, "rainfall": 38.5}, {"high": 17, "low": 8, "dryDays": 24, "snowDays": 0, "rainfall": 49.3}, {"high": 13, "low": 4, "dryDays": 25, "snowDays": 0, "rainfall": 37.7}]}, {"id": 74, "city": "Saint Petersburg", "country": "Russia", "monthlyAvg": [{"high": -2, "low": -8, "dryDays": 10, "snowDays": 25, "rainfall": 49.7}, {"high": -2, "low": -10, "dryDays": 11, "snowDays": 21, "rainfall": 44.9}, {"high": 3, "low": -6, "dryDays": 15, "snowDays": 15, "rainfall": 51}, {"high": 10, "low": 0, "dryDays": 15, "snowDays": 7, "rainfall": 35.3}, {"high": 15, "low": 5, "dryDays": 16, "snowDays": 1, "rainfall": 51.5}, {"high": 20, "low": 10, "dryDays": 13, "snowDays": 0, "rainfall": 91.5}, {"high": 23, "low": 13, "dryDays": 15, "snowDays": 0, "rainfall": 91.6}, {"high": 21, "low": 11, "dryDays": 15, "snowDays": 0, "rainfall": 100.3}, {"high": 15, "low": 7, "dryDays": 14, "snowDays": 0, "rainfall": 54.3}, {"high": 9, "low": 2, "dryDays": 9, "snowDays": 4, "rainfall": 148.7}, {"high": 2, "low": -3, "dryDays": 10, "snowDays": 16, "rainfall": 71.6}, {"high": -1, "low": -7, "dryDays": 11, "snowDays": 22, "rainfall": 63.4}]}, {"id": 75, "city": "Salt Lake City UT", "country": "United States", "monthlyAvg": [{"high": 4, "low": -6, "dryDays": 16, "snowDays": 12, "rainfall": 34.5}, {"high": 7, "low": -4, "dryDays": 15, "snowDays": 9, "rainfall": 36.5}, {"high": 14, "low": 0, "dryDays": 18, "snowDays": 6, "rainfall": 43.2}, {"high": 18, "low": 4, "dryDays": 16, "snowDays": 4, "rainfall": 50.1}, {"high": 24, "low": 8, "dryDays": 18, "snowDays": 1, "rainfall": 46.2}, {"high": 30, "low": 13, "dryDays": 21, "snowDays": 0, "rainfall": 27.5}, {"high": 35, "low": 18, "dryDays": 23, "snowDays": 0, "rainfall": 12.9}, {"high": 34, "low": 17, "dryDays": 21, "snowDays": 0, "rainfall": 15.3}, {"high": 28, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 27.3}, {"high": 20, "low": 5, "dryDays": 22, "snowDays": 1, "rainfall": 38}, {"high": 11, "low": -1, "dryDays": 18, "snowDays": 6, "rainfall": 36.4}, {"high": 5, "low": -6, "dryDays": 19, "snowDays": 11, "rainfall": 28.9}]}, {"id": 76, "city": "San Francisco CA", "country": "United States", "monthlyAvg": [{"high": 15, "low": 5, "dryDays": 19, "snowDays": 0, "rainfall": 56.4}, {"high": 16, "low": 6, "dryDays": 13, "snowDays": 1, "rainfall": 90.5}, {"high": 19, "low": 7, "dryDays": 22, "snowDays": 0, "rainfall": 41.4}, {"high": 19, "low": 8, "dryDays": 21, "snowDays": 0, "rainfall": 29}, {"high": 21, "low": 10, "dryDays": 26, "snowDays": 0, "rainfall": 13.7}, {"high": 23, "low": 12, "dryDays": 27, "snowDays": 0, "rainfall": 1.4}, {"high": 22, "low": 13, "dryDays": 29, "snowDays": 0, "rainfall": 0.8}, {"high": 23, "low": 13, "dryDays": 28, "snowDays": 0, "rainfall": 0.3}, {"high": 25, "low": 12, "dryDays": 27, "snowDays": 0, "rainfall": 2.9}, {"high": 22, "low": 10, "dryDays": 24, "snowDays": 0, "rainfall": 30}, {"high": 18, "low": 7, "dryDays": 19, "snowDays": 0, "rainfall": 44.2}, {"high": 15, "low": 6, "dryDays": 16, "snowDays": 0, "rainfall": 119.8}]}, {"id": 77, "city": "Santiago", "country": "Chile", "monthlyAvg": [{"high": 31, "low": 12, "dryDays": 30, "snowDays": 0, "rainfall": 1.9}, {"high": 30, "low": 12, "dryDays": 27, "snowDays": 0, "rainfall": 14.7}, {"high": 28, "low": 10, "dryDays": 29, "snowDays": 0, "rainfall": 6.3}, {"high": 24, "low": 7, "dryDays": 26, "snowDays": 0, "rainfall": 15.3}, {"high": 20, "low": 5, "dryDays": 25, "snowDays": 0, "rainfall": 37.2}, {"high": 17, "low": 4, "dryDays": 22, "snowDays": 0, "rainfall": 67.1}, {"high": 16, "low": 2, "dryDays": 24, "snowDays": 0, "rainfall": 49.6}, {"high": 18, "low": 4, "dryDays": 24, "snowDays": 0, "rainfall": 38.5}, {"high": 20, "low": 5, "dryDays": 24, "snowDays": 0, "rainfall": 15.8}, {"high": 24, "low": 7, "dryDays": 27, "snowDays": 0, "rainfall": 9}, {"high": 27, "low": 9, "dryDays": 28, "snowDays": 0, "rainfall": 11.5}, {"high": 29, "low": 11, "dryDays": 30, "snowDays": 0, "rainfall": 4.9}]}, {"id": 78, "city": "Sao Paulo", "country": "Brazil", "monthlyAvg": [{"high": 29, "low": 20, "dryDays": 11, "snowDays": 0, "rainfall": 205.6}, {"high": 29, "low": 20, "dryDays": 11, "snowDays": 0, "rainfall": 150.4}, {"high": 28, "low": 20, "dryDays": 14, "snowDays": 0, "rainfall": 137.9}, {"high": 27, "low": 18, "dryDays": 20, "snowDays": 0, "rainfall": 47.1}, {"high": 24, "low": 15, "dryDays": 22, "snowDays": 0, "rainfall": 37.6}, {"high": 24, "low": 14, "dryDays": 23, "snowDays": 0, "rainfall": 26.5}, {"high": 23, "low": 13, "dryDays": 23, "snowDays": 0, "rainfall": 36.2}, {"high": 25, "low": 14, "dryDays": 23, "snowDays": 0, "rainfall": 29.3}, {"high": 25, "low": 15, "dryDays": 17, "snowDays": 0, "rainfall": 59.2}, {"high": 27, "low": 17, "dryDays": 14, "snowDays": 0, "rainfall": 101.4}, {"high": 27, "low": 17, "dryDays": 14, "snowDays": 0, "rainfall": 91.2}, {"high": 28, "low": 19, "dryDays": 12, "snowDays": 0, "rainfall": 133.1}]}, {"id": 79, "city": "Seattle WA", "country": "United States", "monthlyAvg": [{"high": 8, "low": 1, "dryDays": 6, "snowDays": 4, "rainfall": 196}, {"high": 10, "low": 0, "dryDays": 9, "snowDays": 3, "rainfall": 121.9}, {"high": 13, "low": 1, "dryDays": 7, "snowDays": 2, "rainfall": 134.9}, {"high": 16, "low": 3, "dryDays": 9, "snowDays": 1, "rainfall": 86.9}, {"high": 20, "l
ow": 6, "dryDays": 15, "snowDays": 0, "rainfall": 48.1}, {"high": 23, "low": 8, "dryDays": 17, "snowDays": 0, "rainfall": 43.1}, {"high": 26, "low": 10, "dryDays": 23, "snowDays": 0, "rainfall": 17.2}, {"high": 26, "low": 10, "dryDays": 22, "snowDays": 0, "rainfall": 27.4}, {"high": 24, "low": 7, "dryDays": 19, "snowDays": 0, "rainfall": 30.1}, {"high": 17, "low": 5, "dryDays": 10, "snowDays": 1, "rainfall": 103.2}, {"high": 11, "low": 2, "dryDays": 6, "snowDays": 2, "rainfall": 203.8}, {"high": 8, "low": 0, "dryDays": 7, "snowDays": 4, "rainfall": 174.6}]}, {"id": 80, "city": "Seoul", "country": "South Korea", "monthlyAvg": [{"high": 2, "low": -6, "dryDays": 23, "snowDays": 6, "rainfall": 24.3}, {"high": 5, "low": -4, "dryDays": 21, "snowDays": 4, "rainfall": 34.4}, {"high": 11, "low": 2, "dryDays": 22, "snowDays": 2, "rainfall": 55.9}, {"high": 18, "low": 8, "dryDays": 20, "snowDays": 0, "rainfall": 75.3}, {"high": 23, "low": 13, "dryDays": 19, "snowDays": 0, "rainfall": 113.1}, {"high": 27, "low": 18, "dryDays": 17, "snowDays": 0, "rainfall": 171.7}, {"high": 29, "low": 22, "dryDays": 12, "snowDays": 0, "rainfall": 457.2}, {"high": 30, "low": 22, "dryDays": 14, "snowDays": 0, "rainfall": 412.6}, {"high": 26, "low": 17, "dryDays": 18, "snowDays": 0, "rainfall": 182.8}, {"high": 20, "low": 10, "dryDays": 23, "snowDays": 0, "rainfall": 62}, {"high": 12, "low": 3, "dryDays": 19, "snowDays": 2, "rainfall": 60.3}, {"high": 5, "low": -3, "dryDays": 23, "snowDays": 5, "rainfall": 24.6}]}, {"id": 81, "city": "Sevilla", "country": "Spain", "monthlyAvg": [{"high": 16, "low": 6, "dryDays": 22, "snowDays": 0, "rainfall": 84.8}, {"high": 18, "low": 7, "dryDays": 23, "snowDays": 0, "rainfall": 25}, {"high": 21, "low": 9, "dryDays": 25, "snowDays": 0, "rainfall": 39.6}, {"high": 23, "low": 11, "dryDays": 22, "snowDays": 0, "rainfall": 37.7}, {"high": 25, "low": 14, "dryDays": 24, "snowDays": 0, "rainfall": 32.3}, {"high": 28, "low": 17, "dryDays": 28, "snowDays": 0, "rainfall": 11.2}, {"high": 33, "low": 19, "dryDays": 30, "snowDays": 0, "rainfall": 5.2}, {"high": 32, "low": 19, "dryDays": 31, "snowDays": 0, "rainfall": 0.8}, {"high": 29, "low": 17, "dryDays": 25, "snowDays": 0, "rainfall": 58.3}, {"high": 25, "low": 14, "dryDays": 23, "snowDays": 0, "rainfall": 56.8}, {"high": 20, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 72.1}, {"high": 17, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 117.2}]}, {"id": 82, "city": "Shanghai", "country": "China", "monthlyAvg": [{"high": 8, "low": 1, "dryDays": 22, "snowDays": 2, "rainfall": 45}, {"high": 10, "low": 3, "dryDays": 21, "snowDays": 1, "rainfall": 70}, {"high": 14, "low": 7, "dryDays": 20, "snowDays": 0, "rainfall": 85}, {"high": 20, "low": 12, "dryDays": 16, "snowDays": 0, "rainfall": 110}, {"high": 25, "low": 17, "dryDays": 15, "snowDays": 0, "rainfall": 125}, {"high": 28, "low": 22, "dryDays": 12, "snowDays": 0, "rainfall": 198}, {"high": 32, "low": 26, "dryDays": 14, "snowDays": 0, "rainfall": 152}, {"high": 32, "low": 26, "dryDays": 18, "snowDays": 0, "rainfall": 128}, {"high": 28, "low": 21, "dryDays": 19, "snowDays": 0, "rainfall": 140}, {"high": 23, "low": 15, "dryDays": 22, "snowDays": 0, "rainfall": 65}, {"high": 17, "low": 10, "dryDays": 23, "snowDays": 0, "rainfall": 55}, {"high": 11, "low": 3, "dryDays": 23, "snowDays": 1, "rainfall": 29}]}, {"id": 83, "city": "Singapore", "country": "Singapore", "monthlyAvg": [{"high": 30, "low": 24, "dryDays": 13, "snowDays": 0, "rainfall": 234.4}, {"high": 32, "low": 24, "dryDays": 15, "snowDays": 0, "rainfall": 100.8}, {"high": 32, "low": 25, "dryDays": 14, "snowDays": 0, "rainfall": 169.8}, {"high": 32, "low": 25, "dryDays": 10, "snowDays": 0, "rainfall": 185.4}, {"high": 32, "low": 25, "dryDays": 12, "snowDays": 0, "rainfall": 153.6}, {"high": 32, "low": 25, "dryDays": 11, "snowDays": 0, "rainfall": 129.7}, {"high": 31, "low": 25, "dryDays": 12, "snowDays": 0, "rainfall": 256.4}, {"high": 31, "low": 25, "dryDays": 11, "snowDays": 0, "rainfall": 192.8}, {"high": 32, "low": 25, "dryDays": 12, "snowDays": 0, "rainfall": 174}, {"high": 32, "low": 25, "dryDays": 10, "snowDays": 0, "rainfall": 211.3}, {"high": 31, "low": 24, "dryDays": 5, "snowDays": 0, "rainfall": 271.2}, {"high": 30, "low": 24, "dryDays": 6, "snowDays": 0, "rainfall": 323.7}]}, {"id": 84, "city": "Sofia", "country": "Bulgaria", "monthlyAvg": [{"high": 4, "low": -5, "dryDays": 19, "snowDays": 9, "rainfall": 32.1}, {"high": 7, "low": -4, "dryDays": 18, "snowDays": 10, "rainfall": 28.2}, {"high": 12, "low": 0, "dryDays": 17, "snowDays": 7, "rainfall": 37}, {"high": 17, "low": 5, "dryDays": 12, "snowDays": 2, "rainfall": 74.4}, {"high": 21, "low": 9, "dryDays": 13, "snowDays": 0, "rainfall": 75.8}, {"high": 25, "low": 13, "dryDays": 13, "snowDays": 0, "rainfall": 81.1}, {"high": 28, "low": 14, "dryDays": 17, "snowDays": 0, "rainfall": 66.6}, {"high": 28, "low": 14, "dryDays": 20, "snowDays": 0, "rainfall": 57.8}, {"high": 23, "low": 10, "dryDays": 18, "snowDays": 0, "rainfall": 72.4}, {"high": 18, "low": 6, "dryDays": 19, "snowDays": 1, "rainfall": 55.4}, {"high": 10, "low": 0, "dryDays": 16, "snowDays": 5, "rainfall": 45.4}, {"high": 4, "low": -4, "dryDays": 16, "snowDays": 10, "rainfall": 42.4}]}, {"id": 85, "city": "Stockholm", "country": "Sweden", "monthlyAvg": [{"high": 1, "low": -4, "dryDays": 23, "snowDays": 11, "rainfall": 12.1}, {"high": 1, "low": -5, "dryDays": 22, "snowDays": 12, "rainfall": 15.3}, {"high": 5, "low": -3, "dryDays": 24, "snowDays": 10, "rainfall": 21}, {"high": 10, "low": 1, "dryDays": 23, "snowDays": 5, "rainfall": 16.5}, {"high": 16, "low": 5, "dryDays": 25, "snowDays": 1, "rainfall": 18.6}, {"high": 20, "low": 10, "dryDays": 22, "snowDays": 0, "rainfall": 44.1}, {"high": 22, "low": 12, "dryDays": 24, "snowDays": 0, "rainfall": 36.6}, {"high": 21, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 38.6}, {"high": 16, "low": 7, "dryDays": 22, "snowDays": 0, "rainfall": 25.6}, {"high": 10, "low": 3, "dryDays": 23, "snowDays": 2, "rainfall": 25.3}, {"high": 4, "low": -1, "dryDays": 23, "snowDays": 8, "rainfall": 27.1}, {"high": 1, "low": -4, "dryDays": 24, "snowDays": 9, "rainfall": 13.4}]}, {"id": 86, "city": "Sydney", "country": "Australia", "monthlyAvg": [{"high": 27, "low": 19, "dryDays": 15, "snowDays": 0, "rainfall": 75.5}, {"high": 27, "low": 20, "dryDays": 14, "snowDays": 0, "rainfall": 126.1}, {"high": 25, "low": 18, "dryDays": 16, "snowDays": 0, "rainfall": 80.4}, {"high": 23, "low": 15, "dryDays": 18, "snowDays": 0, "rainfall": 98.3}, {"high": 20, "low": 12, "dryDays": 18, "snowDays": 0, "rainfall": 101}, {"high": 18, "low": 9, "dryDays": 17, "snowDays": 0, "rainfall": 111}, {"high": 17, "low": 8, "dryDays": 20, "snowDays": 0, "rainfall": 56.7}, {"high": 19, "low": 9, "dryDays": 21, "snowDays": 0, "rainfall": 63.7}, {"high": 21, "low": 11, "dryDays": 19, "snowDays": 0, "rainfall": 66.5}, {"high": 23, "low": 14, "dryDays": 18, "snowDays": 0, "rainfall": 46.4}, {"high": 24, "low": 16, "dryDays": 15, "snowDays": 0, "rainfall": 65.8}, {"high": 26, "low": 18, "dryDays": 17, "snowDays": 0, "rainfall": 65.6}]}, {"id": 87, "city": "Taghazout", "country": "Morocco", "monthlyAvg": [{"high": 22, "low": 8, "dryDays": 26, "snowDays": 0, "rainfall": 36.9}, {"high": 24, "low": 9, "dryDays": 25, "snowDays": 0, "rainfall": 28.7}, {"high": 26, "low": 11, "dryDays": 27, "snowDays": 0, "rainfall": 25.2}, {"high": 25, "low": 13, "dryDays": 27, "snowDays": 0, "rainfall": 13.1}, {"high": 26, "low": 14, "dryDays": 30, "snowDays": 0, "rainfall": 7.2}, {"high": 28, "low": 17, "dryDays": 30, "snowDays": 0, "rainfall": 0.6}, {"high": 30, "low": 18, "dryDays": 31, "snowDays": 0, "rainfall": 0.5}, {"high": 30, "low": 18, "dryDays": 30, "snowDays": 0, "rainfall": 1.3}, {"high": 29, "low": 17, "dryDays": 29, "snowDays": 0, "rainfall": 1.1}, {"high": 28, "low": 15, "dryDays": 28, "snowDays": 0, "rainfall": 22.4}, {"high": 25, "low": 2, "dryDays": 26, "snowDays": 0, "rainfall": 28.7}, {"high": 22, "low": 9, "dryDays": 24, "snowDays": 0, "rainfall": 62.9}]}, {"id": 88, "city": "Tel Aviv", "country": "Israel", "monthlyAvg": [{"high": 17, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 109.7}, {"high": 18, "low": 9, "dryDays": 18, "snowDays": 0, "rainfall": 80.4}, {"high": 20, "low": 11, "dryDays": 24, "snowDays": 0, "rainfall": 37.7}, {"high": 24, "low": 14, "dryDays": 27, "snowDays": 0, "rainfall": 13.1}, {"high": 26, "low": 18, "dryDays": 30, "snowDays": 0, "rainfall": 2.2}, {"high": 29, "low": 21, "dryDays": 30, "snowDays": 0, "rainfall": 0.1}, {"high": 31, "low": 24, "dryDays": 31, "snowDays": 0, "rainfall": 0}, {"high": 31, "low": 24, "dryDays": 31, "snowDays": 0, "rainfall": 5.6}, {"high": 30, "low": 23, "dryDays": 29, "snowDays": 0, "rainfall": 1.3}, {"high": 28, "low": 19, "dryDays": 28, "snowDays": 0, "rainfall": 10.5}, {"high": 24, "low": 15, "dryDays": 24, "snowDays": 0, "rainfall": 44.5}, {"high": 19, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 87.9}]}, {"id": 89, "city": "Tokyo", "country": "Japan", "monthlyAvg": [{"high": 10, "low": -1, "dryDays": 24, "snowDays": 1, "rainfall": 39.5}, {"high": 11, "low": 0, "dryDays": 21, "snowDays": 1, "rainfall": 26.6}, {"high": 14, "low": 3, "dryDays": 19, "snowDays": 1, "rainfall": 69}, {"high": 20, "low": 8, "dryDays": 17, "snowDays": 0, "rainfall": 88.9}, {"high": 24, "low": 13, "dryDays": 15, "snowDays": 0, "rainfall": 118.9}, {"high": 27, "low": 18, "dryDays": 12, "snowDays": 0, "rainfall": 145}, {"high": 31, "low": 22, "dryDays": 13, "snowDays": 0, "rainfall": 158.5}, {"high": 32, "low": 23, "dryDays": 14, "snowDays": 0, "rainfall": 229}, {"high": 28, "low": 19, "dryDays": 14, "snowDays": 0, "rainfall": 207.6}, {"high": 22, "low": 13, "dryDays": 17, "snowDays": 0, "rainfall": 177.8}, {"high": 17, "low": 6, "dryDays": 21, "snowDays": 0, "rainfall": 51}, {"high": 12, "low": 1, "dryDays": 25, "snowDays": 0, "rainfall": 31}]}, {"id": 90, "city": "Toronto", "country": "Canada", "monthlyAvg": [{"high": 0, "low": -7, "dryDays": 25, "snowDays": 0, "rainfall": 18.9}, {"high": 1, "low": -6, "dryDays": 25, "snowDays": null, "rainfall": 11.5}, {"high": 5, "low": -2, "dryDays": 26, "snowDays": null, "rainfall": 17.7}, {"high": 11, "low": 3, "dryDays": 25, "snowDays": 0, "rainfall": 26.6}, {"high": 17, "low": 8, "dryDays": 21, "snowDays": 0, "rainfall": 46.6}, {"high": 23, "low": 14, "dryDays": 19, "snowDays": 0, "rainfall": 76.2}, {"high": 26, "low": 18, "dryDays": 21, "snowDays": 0, "rainfall": 63.6}, {"high": 26, "low": 18, "dryDays": 22, "snowDays": 0, "rainfall": 45.7}, {"high": 23, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 52.4}, {"high": 16, "low": 8, "dryDays": 21, "snowDays": 0, "rainfall": 48.3}, {"high": 9, "low": 3, "dryDays": 24, "snowDays": null, "rainfall": 41.4}, {"high": 3, "low": -3, "dryDays": 27, "snowDays": null, "rainfall": 26.8}]}, {"id": 91, "city": "Tucson AZ", "country": "United States", "monthlyAvg": [{"high": 20, "low": 4, "dryDays": 24, "snowDays": 0, "rainfall": 21.5}, {"high": 22, "low": 5, "dryDays": 21, "snowDays": 0, "rainfall": 23.1}, {"high": 25, "low": 7, "dryDays": 25, "snowDays": 0, "rainfall": 18.2}, {"high": 30, "low": 10, "dryDays": 27, "snowDays": 0, "rainfall": 7.2}, {"high": 34, "low": 15, "dryDays": 28, "snowDays": 0, "rainfall": 5.6}, {"high": 39, "low": 20, "dryDays": 26, "snowDays": 0, "rainfall": 5.7}, {"high": 39, "low": 23, "dryDays": 16, "snowDays": 0, "rainfall": 55.7}, {"high": 37, "low": 23, "dryDays": 15, "snowDays": 0, "rainfall": 59.8}, {"high": 36, "low": 20, "dryDays": 22, "snowDays": 0, "rainfall": 34.1}, {"high": 31, "low": 14, "dryDays": 26, "snowDays": 0, "rainfall": 20.5}, {"high": 25, "low": 7, "dryDays": 26, "snowDays": 0, "rainfall": 12.8}, {"high": 20, "low": 3, "dryDays": 24, "snowDays": 0, "rainfall": 25.4}]}, {"id": 92, "city": "Ubud Bali", "country": "Indonesia", "monthlyAvg": [{"high": 32, "low": 24, "dryDays": 16, "snowDays": 0, "rainfall": 180.9}, {"high": 31, "low": 24, "dryDays": 13, "snowDays": 0, "rainfall": 167}, {"high": 32, "low": 24, "dryDays": 18, "snowDays": 0, "rainfall": 148.9}, {"high": 32, "low": 24, "dryDays": 21, "snowDays": 0, "rainfall": 53.1}, {"high": 31, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 37.3}, {"high": 30, "low": 24, "dryDays": 24, "snowDays": 0, "rainfall": 26.4}, {"high": 30, "low": 23, "dryDays": 25, "snowDays": 0, "rainfall": 13.7}, {"high": 30, "low": 23, "dryDays": 27, "snowDays": 0, "rainfall": 11.3}, {"high": 30, "low": 23, "dryDays": 26, "snowDays": 0, "rainfall": 13}, {"high": 32, "low": 24, "dryDays": 25, "snowDays": 0, "rainfall": 36.3}, {"high": 33, "low": 25, "dryDays": 21, "snowDays": 0, "rainfall": 47.6}, {"high": 32, "low": 24, "dryDays": 15, "snowDays": 0, "rainfall": 126.5}]}, {"id": 93, "city": "Valencia", "country": "Spain", "monthlyAvg": [{"high": 14, "low": 5, "dryDays": 24, "snowDays": 0, "rainfall": 24}, {"high": 16, "low": 6, "dryDays": 21, "snowDays": 0, "rainfall": 30}, {"high": 18, "low": 6, "dryDays": 25, "snowDays": 0, "rainfall": 21}, {"high": 19, "low": 8, "dryDays": 21, "snowDays": 0, "rainfall": 36}, {"high": 21, "low": 11, "dryDays": 21, "snowDays": 0, "rainfall": 33}, {"high": 25, "low": 15, "dryDays": 23, "snowDays": 0, "rainfall": 15}, {"high": 28, "low": 16, "dryDays": 27, "snowDays": 0, "rainfall": 6}, {"high": 28, "low": 17, "dryDays": 25, "snowDays": 0, "rainfall": 18}, {"high": 26, "low": 15, "dryDays": 24, "snowDays": 0, "rainfall": 42}, {"high": 22, "low": 11, "dryDays": 24, "snowDays": 0, "rainfall": 36}, {"high": 18, "low": 8, "dryDays": 22, "snowDays": 0, "rainfall": 42}, {"high": 15, "low": 6, "dryDays": 25, "snowDays": 0, "rainfall": 30}]}, {"id": 94, "city": "Vancouver", "country": "Canada", "monthlyAvg": [{"high": 7, "low": 0, "dryDays": 8, "snowDays": 5, "rainfall": 232}, {"high": 10, "low": 1, "dryDays": 11, "snowDays": 3, "rainfall": 122.8}, {"high": 12, "low": 2, "dryDays": 8, "snowDays": 3, "rainfall": 154}, {"high": 16, "low": 5, "dryDays": 10, "snowDays": 1, "rainfall": 116.4}, {"high": 19, "low": 8, "dryDays": 13, "snowDays": 0, "rainfall": 91.7}, {"high": 22, "low": 10, "dryDays": 13, "snowDays": 0, "rainfall": 79}, {"high": 25, "low": 12, "dryDays": 21, "snowDays": 0, "rainfall": 41.2}, {"high": 25, "low": 12, "dryDays": 21, "snowDays": 0, "rainfall": 54.2}, {"high": 23, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 67.8}, {"high": 16, "low": 6, "dryDays": 11, "snowDays": 0, "rainfall": 158.9}, {"high": 10, "low": 3, "dryDays": 7, "snowDays": 2, "rainfall": 250.8}, {"high": 7, "low": 0, "dryDays": 8, "snowDays": 6, "rainfall": 208.5}]}, {"id": 95, "city": "Venice", "country": "Italy", "monthlyAvg": [{"high": 8, "low": 0, "dryDays": 23, "snowDays": 1, "rainfall": 23.3}, {"high": 9, "low": 1, "dryDays": 22, "snowDays": 1, "rainfall": 28.4}, {"high": 14, "low": 5, "dryDays": 23, "snowDays": 1, "rainfall": 29.1}, {"high": 17, "low": 8, "dryDays": 17, "snowDays": 0, "rainfall": 83.3}, {"high": 22, "low": 14, "dryDays": 20, "snowDays": 0, "rainfall": 62.1}, {"high": 26, "low": 17, "dryDays": 18, "snowDays": 0, "rainfall": 79.3}, {"high": 29, "low": 19, "dryDays": 21, "snowDays": 0, "rainfall": 67.5}, {"high": 29, "low": 19, "dryDays": 21, "snowDays": 0, "rainfall": 59.1}, {"high": 24, "low": 14, "dryDays": 21, "snowDays": 0, "rainfall": 78.7}, {"high": 19, "low": 10, "dryDays": 20, "snowDays": 0, "rainfall": 82.7}, {"high": 13, "low": 5, "dryDays": 19, "snowDays": 1, "rainfall": 68.9}, {"high": 8, "low": 1, "dryDays": 21, "snowDays": 1, "rainfall": 54.2}]}, {"id": 96, "city": "Vienna", "country": "Austria", "monthlyAvg": [{"high": 3, "low": -3, "dryDays": 17, "snowDays": 8, "rainfall": 25.4}, {"high": 6, "low": -2, "dryDays": 15, "snowDays": 6, "rainfall": 26.2}, {"high": 10, "low": 1, "dryDays": 15, "snowDays": 5, "rainfall": 44}, {"high": 16, "low": 5, "dryDays": 15, "snowDays": 1, "rainfall": 47.7}, {"high": 21, "low": 9, "dryDays": 16, "snowDays": 0, "rainfall": 66.5}, {"high": 24, "low": 13, "dryDays": 13, "snowDays": 0, "rainfall": 76.6}, {"high": 26, "low": 14, "dryDays": 15, "snowDays": 0, "rainfall": 82.2}, {"high": 26, "low": 14, "dryDays": 18, "snowDays": 0, "rainfall": 70.7}, {"high": 21, "low": 10, "dryDays": 16, "snowDays": 0, "rainfall": 66.2}, {"high": 15, "low": 6, "dryDays": 17, "snowDays": 0, "rainfall": 35}, {"high": 8, "low": 2, "dryDays": 12, "snowDays": 4, "rainfall": 40.8}, {"high": 3, "low": -2, "dryDays": 15, "snowDays": 8, "rainfall": 35.3}]}, {"id": 97, "city": "Warsaw", "country": "Poland", "monthlyAvg": [{"high": 2, "low": -4, "dryDays": 12, "snowDays": 13, "rainfall": 29.8}, {"high": 3, "low": -4, "dryDays": 10, "snowDays": 13, "rainfall": 30.4}, {"high": 7, "low": -1, "dryDays": 13, "snowDays": 9, "rainfall": 31.5}, {"high": 14, "low": 3, "dryDays": 14, "snowDays": 3, "rainfall": 42.2}, {"high": 20, "low": 8, "dryDays": 15, "snowDays": 0, "rainfall": 46.3}, {"high": 22, "low": 11, "dryDays": 13, "snowDays": 0, "rainfall": 60.8}, {"high": 25, "low": 14, "dryDays": 14, "snowDays": 0, "rainfall": 90.8}, {"high": 24, "low": 13, "dryDays": 15, "snowDays": 0, "rainfall": 61.8}, {"high": 18, "low": 9, "dryDays": 15, "snowDays": 0, "rainfall": 51.4}, {"high": 13, "low": 4, "dryDays": 14, "snowDays": 1, "rainfall": 37.1}, {"high": 6, "low": 0, "dryDays": 11, "snowDays": 7, "rainfall": 51.3}, {"high": 2, "low": -3, "dryDays": 11, "snowDays": 13, "rainfall": 34.7}]}, {"id": 98, "city": "Washington DC", "country": "United States", "monthlyAvg": [{"high": 9, "low": -1, "dryDays": 18, "snowDays": 5, "rainfall": 83.8}, {"high": 10, "low": -1, "dryDays": 16, "snowDays": 4, "rainfall": 62.6}, {"high": 14, "low": 3, "dryDays": 17, "snowDays": 3, "rainfall": 117.2}, {"high": 19, "low": 8, "dryDays": 15, "snowDays": 1, "rainfall": 90.6}, {"high": 24, "low": 13, "dryDays": 17, "snowDays": 0, "rainfall": 87.8}, {"high": 29, "low": 19, "dryDays": 16, "snowDays": 0, "rainfall": 111}, {"high": 31, "low": 21, "dryDays": 16, "snowDays": 0, "rainfall": 125.8}, {"high": 30, "low": 21, "dryDays": 19, "snowDays": 0, "rainfall": 106.6}, {"high": 27, "low": 17, "dryDays": 19, "snowDays": 0, "rainfall": 105.4}, {"high": 21, "low": 11, "dryDays": 20, "snowDays": 0, "rainfall": 83.1}, {"high": 16, "low": 5, "dryDays": 18, "snowDays": 1, "rainfall": 73.1}, {"high": 10, "low": 1, "dryDays": 18, "snowDays": 3, "rainfall": 85.6}]}, {"id": 99, "city": "Wellington", "country": "New Zealand", "monthlyAvg": [{"high": 19, "low": 14, "dryDays": 24, "snowDays": 0, "rainfall": 43.5}, {"high": 19, "low": 15, "dryDays": 22, "snowDays": 0, "rainfall": 42.9}, {"high": 18, "low": 14, "dryDays": 24, "snowDays": 0, "rainfall": 41.5}, {"high": 16, "low": 12, "dryDays": 23, "snowDays": 0, "rainfall": 42.8}, {"high": 14, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 49.2}, {"high": 12, "low": 9, "dryDays": 20, "snowDays": 9, "rainfall": 64.3}, {"high": 11, "low": 8, "dryDays": 22, "snowDays": 0, "rainfall": 73.5}, {"high": 12, "low": 8, "dryDays": 22, "snowDays": 0, "rainfall": 54}, {"high": 13, "low": 9, "dryDays": 21, "snowDays": 0, "rainfall": 52.2}, {"high": 14, "low": 10, "dryDays": 22, "snowDays": 0, "rainfall": 47.4}, {"high": 16, "low": 11, "dryDays": 23, "snowDays": 0, "rainfall": 46.5}, {"high": 18, "low": 13, "dryDays": 24, "snowDays": 0, "rainfall": 45.5}]}, {"id": 100, "city": "Zurich", "country": "Switzerland", "monthlyAvg": [{"high": 4, "low": -2, "dryDays": 15, "snowDays": 12, "rainfall": 59.1}, {"high": 6, "low": -2, "dryDays": 14, "snowDays": 11, "rainfall": 64.1}, {"high": 11, "low": 1, "dryDays": 13, "snowDays": 7, "rainfall": 70.5}, {"high": 15, "low": 3, "dryDays": 13, "snowDays": 3, "rainfall": 84.8}, {"high": 20, "low": 8, "dryDays": 14, "snowDays": 0, "rainfall": 101.7}, {"high": 23, "low": 11, "dryDays": 12, "snowDays": 0, "rainfall": 101.2}, {"high": 25, "low": 13, "dryDays": 14, "snowDays": 0, "rainfall": 121}, {"high": 25, "low": 13, "dryDays": 15, "snowDays": 0, "rainfall": 117}, {"high": 20, "low": 9, "dryDays": 12, "snowDays": 0, "rainfall": 85.9}, {"high": 15, "low": 6, "dryDays": 11, "snowDays": 2, "rainfall": 90.2}, {"high": 8, "low": 1, "dryDays": 11, "snowDays": 8, "rainfall": 80.4}, {"high": 4, "low": -1, "dryDays": 14, "snowDays": 12, "rainfall": 71.8}]}, {"id": 101, "city": "Albuquerque NM", "country": "United States", "monthlyAvg": [{"high": 10, "low": -4, "dryDays": 24, "snowDays": 4, "rainfall": 10.7}, {"high": 14, "low": -2, "dryDays": 22, "snowDays": 3, "rainfall": 12.6}, {"high": 18, "low": 1, "dryDays": 23, "snowDays": 3, "rainfall": 16.5}, {"high": 23, "low": 6, "dryDays": 24, "snowDays": 1, "rainfall": 16.3}, {"high": 28, "low": 11, "dryDays": 24, "snowDays": 0, "rainfall": 11.5}, {"high": 33, "low": 16, "dryDays": 21, "snowDays": 0, "rainfall": 14.5}, {"high": 34, "low": 19, "dryDays": 14, "snowDays": 0, "rainfall": 39.3}, {"high": 32, "low": 18, "dryDays": 14, "snowDays": 0, "rainfall": 43}, {"high": 29, "low": 14, "dryDays": 20, "snowDays": 0, "rainfall": 26.4}, {"high": 23, "low": 7, "dryDays": 24, "snowDays": 1, "rainfall": 23.7}, {"high": 15, "low": 1, "dryDays": 24, "snowDays": 2, "rainfall": 16.4}, {"high": 10, "low": -4, "dryDays": 25, "snowDays": 5, "rainfall": 13.9}]}, {"id": 102, "city": "Vermont IL", "country": "United States", "monthlyAvg": [{"high": 3, "low": -8, "dryDays": 18, "snowDays": 11, "rainfall": 52.1}, {"high": 5, "low": -6, "dryDays": 17, "snowDays": 8, "rainfall": 47.1}, {"high": 11, "low": -1, "dryDays": 17, "snowDays": 5, "rainfall": 62.5}, {"high": 19, "low": 5, "dryDays": 14, "snowDays": 1, "rainfall": 90.4}, {"high": 24, "low": 10, "dryDays": 14, "snowDays": 0, "rainfall": 106.4}, {"high": 29, "low": 16, "dryDays": 15, "snowDays": 0, "rainfall": 80.1}, {"high": 30, "low": 18, "dryDays": 18, "snowDays": 0, "rainfall": 98.7}, {"high": 30, "low": 17, "dryDays": 18, "snowDays": 0, "rainfall": 87.7}, {"high": 26, "low": 12, "dryDays": 19, "snowDays": 0, "rainfall": 81.7}, {"high": 20, "low": 6, "dryDays": 18, "snowDays": 0, "rainfall": 70}, {"high": 11, "low": 0, "dryDays": 17, "snowDays": 5, "rainfall": 71.6}, {"high": 4, "low": -6, "dryDays": 18, "snowDays": 10, "rainfall": 50.7}]}, {"id": 103, "city": "Nashville TE", "country": "United States", "monthlyAvg": [{"high": 9, "low": -1, "dryDays": 18, "snowDays": 8, "rainfall": 84.4}, {"high": 10, "low": 0, "dryDays": 14, "snowDays": 6, "rainfall": 89.1}, {"high": 16, "low": 5, "dryDays": 17, "snowDays": 2, "rainfall": 82.8}, {"high": 22, "low": 10, "dryDays": 15, "snowDays": 1, "rainfall": 124.2}, {"high": 26, "low": 15, "dryDays": 16, "snowDays": 0, "rainfall": 148.6}, {"high": 29, "low": 18, "dryDays": 17, "snowDays": 0, "rainfall": 62.6}, {"high": 31, "low": 21, "dryDays": 18, "snowDays": 0, "rainfall": 84.7}, {"high": 32, "low": 21, "dryDays": 20, "snowDays": 0, "rainfall": 87.5}, {"high": 28, "low": 16, "dryDays": 20, "snowDays": 0, "rainfall": 99.5}, {"high": 22, "low": 10, "dryDays": 21, "snowDays": 0, "rainfall": 106.7}, {"high": 16, "low": 5, "dryDays": 17, "snowDays": 1, "rainfall": 110.4}, {"high": 9, "low": 0, "dryDays": 16, "snowDays": 5, "rainfall": 128.6}]}, {"id": 104, "city": "St. Louis MO", "country": "United States", "monthlyAvg": [{"high": 7, "low": -4, "dryDays": 16, "snowDays": 10, "rainfall": 69.8}, {"high": 9, "low": -3, "dryDays": 16, "snowDays": 8, "rainfall": 57.3}, {"high": 15, "low": 2, "dryDays": 16, "snowDays": 4, "rainfall": 83.3}, {"high": 21, "low": 8, "dryDays": 13, "snowDays": 1, "rainfall": 104.1}, {"high": 26, "low": 13, "dryDays": 13, "snowDays": 0, "rainfall": 129.9}, {"high": 30, "low": 19, "dryDays": 16, "snowDays": 0, "rainfall": 103.4}, {"high": 32, "low": 21, "dryDays": 18, "snowDays": 0, "rainfall": 100.7}, {"high": 32, "low": 21, "dryDays": 19, "snowDays": 0, "rainfall": 73.5}, {"high": 28, "low": 15, "dryDays": 20, "snowDays": 0, "rainfall": 76.1}, {"high": 22, "low": 9, "dryDays": 19, "snowDays": 0, "rainfall": 71.1}, {"high": 14, "low": 3, "dryDays": 18, "snowDays": 3, "rainfall": 86.4}, {"high": 8, "low": -3, "dryDays": 17, "snowDays": 9, "rainfall": 64.3}]}, {"id": 105, "city": "Minneapolis MN", "country": "United States", "monthlyAvg": [{"high": -3, "low": -13, "dryDays": 20, "snowDays": 16, "rainfall": 19.9}, {"high": -1, "low": -11, "dryDays": 19, "snowDays": 13, "rainfall": 17.4}, {"high": 6, "low": -5, "dryDays": 18, "snowDays": 11, "rainfall": 44}, {"high": 15, "low": 2, "dryDays": 15, "snowDays": 5, "rainfall": 73.4}, {"high": 22, "low": 9, "dryDays": 14, "snowDays": 0, "rainfall": 92.3}, {"high": 27, "low": 14, "dryDays": 13, "snowDays": 0, "rainfall": 112.8}, {"high": 29, "low": 17, "dryDays": 16, "snowDays": 0, "rainfall": 107.2}, {"high": 28, "low": 16, "dryDays": 17, "snowDays": 0, "rainfall": 111.7}, {"high": 24, "low": 11, "dryDays": 16, "snowDays": 0, "rainfall": 82.1}, {"high": 16, "low": 4, "dryDays": 18, "snowDays": 2, "rainfall": 58.7}, {"high": 6, "low": -3, "dryDays": 19, "snowDays": 10, "rainfall": 43.4}, {"high": -1, "low": -11, "dryDays": 19, "snowDays": 16, "rainfall": 21.8}]}]

Notice that the whole file has appeared on one line. This is nice and compact, but not very human-readable! To make the dump function split the output over lines and indent the nested structure we simply need to pass one additional parameter, indent=4 (where the value of the parameter specifies how many columns to use when indenting; 4 and 2 are commonly used values). For example,

with open('data/climate_copy.json', 'w') as jsonfile:
    json.dump(climate_data, jsonfile, indent=4)

We can check the contents of this file by printing the first few lines in a terminal window, e.g., using linux,

%%bash
head data/climate_copy.json
[
    {
        "id": 1,
        "city": "Amsterdam",
        "country": "Netherlands",
        "monthlyAvg": [
            {
                "high": 7,
                "low": 3,
                "dryDays": 19,

As we mentioned, not all Python data structures can be directly translated into valid JSON. For example, suppose that we had a list of dictionaries that had tuple entries. What would happen?

import json
my_data = [{'name': 'Alice', 'favourite_numbers': (1, 2, 3)},
           {'name': 'Bob', 'favourite_numbers': (4, 5, 6)}]

with open('tmp/numbers.json', 'w') as jsonfile:
    json.dump(my_data, jsonfile)

with open('tmp/numbers.json') as jsonfile:
    my_data_read_back_in = json.load(jsonfile)

print('favourite_numbers starts as a:')
print(type(my_data[0]['favourite_numbers']))
print('favourite_numbers is read back as:')
print(type(my_data_read_back_in[0]['favourite_numbers']))
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[14], line 5
      1 import json
      2 my_data = [{'name': 'Alice', 'favourite_numbers': (1, 2, 3)},
      3            {'name': 'Bob', 'favourite_numbers': (4, 5, 6)}]
----> 5 with open('tmp/numbers.json', 'w') as jsonfile:
      6     json.dump(my_data, jsonfile)
      8 with open('tmp/numbers.json') as jsonfile:

File /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/IPython/core/interactiveshell.py:324, in _modified_open(file, *args, **kwargs)
    317 if file in {0, 1, 2}:
    318     raise ValueError(
    319         f"IPython won't let you open fd={file} by default "
    320         "as it is likely to crash IPython. If you know what you are doing, "
    321         "you can use builtins' open."
    322     )
--> 324 return io_open(file, *args, **kwargs)

FileNotFoundError: [Errno 2] No such file or directory: 'tmp/numbers.json'

Note that the tuple has been stored as a JSON array, so on reading it is interpreted as a Python list, that is, the my_data_read_back_in variable is not the same as the original my_data variable. The values stored in both are the same, but different data types are used (i.e. a list versus a tuple). This can lead to subtle bugs if you are not careful.

In the more extreme example below, we will try writing a dictionary that uses an integer key.

import json
my_data = [{1: 'chocolate', 2: 'vanilla'},
            {1: 'raspberry', 2: 'chocolate'}]

with open('tmp/icecream.json', 'w') as jsonfile:
    json.dump(my_data, jsonfile)

with open('tmp/icecream.json') as jsonfile:
    my_data_read_back_in = json.load(jsonfile)


print(my_data_read_back_in)
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[15], line 5
      1 import json
      2 my_data = [{1: 'chocolate', 2: 'vanilla'},
      3             {1: 'raspberry', 2: 'chocolate'}]
----> 5 with open('tmp/icecream.json', 'w') as jsonfile:
      6     json.dump(my_data, jsonfile)
      8 with open('tmp/icecream.json') as jsonfile:

File /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/IPython/core/interactiveshell.py:324, in _modified_open(file, *args, **kwargs)
    317 if file in {0, 1, 2}:
    318     raise ValueError(
    319         f"IPython won't let you open fd={file} by default "
    320         "as it is likely to crash IPython. If you know what you are doing, "
    321         "you can use builtins' open."
    322     )
--> 324 return io_open(file, *args, **kwargs)

FileNotFoundError: [Errno 2] No such file or directory: 'tmp/icecream.json'

Note that in this case, the key values were converted to strings. Again, this might lead to problems if we later expected the key values to be numeric.

These issues do not usually cause real difficulties, but it is worth being aware of them.

3.3 JSON Lines format#

One of the nice features of the CSV format is that each data entry is stored on a separate line. This makes it very easy to read items from large files one at a time, i.e., note how the csv.reader and csv.DictReader objects iterate over a file, line by line, returning a data entry each time.

With the standard JSON format this is not possible. JSON does not dictate how white space is used and as we have seen, it is typical to store a single data-entry over many lines using indentation to indicate the nested structure. Even if we insisted on storing each data-entry on a single line there is a further problem: the JSON format for a list of dictionaries requires the whole list to be enclosed in square brackets. This means that a JSON parser will be looking for the closing square bracket before it can return any data. This is not a problem for small files, but for large files it means that the whole file must be read into memory before any data can be returned.

To make JSON more friendly for storing large data science data sets, the JSON Lines format was developed (typically stored with the file extension .jsonl). In this format, we simply store each data entry as a valid JSON string on a separate line terminated by a newline character. Note that although each line is a valid JSON string, the file as a whole is not. i.e., the list of data entries is not enclosed in square brackets, and the data entries are not separated by commas. However, this file, like a CSV file, can be read and parsed line by line. This is particularly useful for processing large data science data sets that may be too large to fit into memory.

To make this clear, compare the JSON and JSON Lines formats for the ice cream flavour data that we had above.

  • First, as it might appear in a JSON file…

[
 {
    "name": "Alice",
    "favourite_numbers": [1, 2, 3]
 },
 {
    "name": "Bob",
    "favourite_numbers": [4, 5, 6]
 }
]
  • … and now as it would appear in a JSON Lines file.

 {"name": "Alice", "favourite_numbers": [1, 2, 3]}
 {"name": "Bob", "favourite_numbers": [4, 5, 6]}

Note that we no longer enclose the items in a list and we no longer separate them with commas. However, we insist that each item has its own line.

The JSON Lines format is a very simple convention and the full specification can be found on this single page website, https://jsonlines.org/

3.3.1 Reading JSON lines files#

Note, because .jsonl is not a valid .json file, it cannot be read directly with the builtin json.read function. Also, there is no jsonl file reader built into the standard library. However, we can easily read .jsonl files with a few lines of Python. To do this, we can use the json.loads function, which will convert a single string into a JSON object. Using this, we can read the file line-by-line and convert each line as we go. For example,

import json

with open('data/climate.jsonl') as jsonfile:
    climate_data = [json.loads(line) for line in jsonfile]

Note, the example above is not particularly useful as we have still read the entire data into memory. If the dataset were very large we would more typically be processing the data while we read, i.e., we might do something like the following.

import json

with open('data/climate.jsonl') as jsonfile:
    for line in jsonfile:
        climate_data_entry = json.loads(line)
        # do something with this data entry

3.3.2 Writing JSON lines files#

Writing files in JSON line format is just as easy. We simply need to convert each data entry into a JSON string and write it to a file. The json.dumps function will convert the JSON object into a string for us. So, for example,

import json

with open('data/climate.jsonl', 'w') as jsonfile:
    for data_entry in climate_data:
        jsonfile.write(json.dumps(data_entry) + '\n')

Note how we are adding a newline character (‘\n’) to the end of each string. This is important as it will ensure that each data entry is stored on a separate line.

Note that because the JSON lines format squashes the entire object onto a single line, it is no longer quite as human-readable as the standard JSON format. However, for most popular coding editors (such as VSCode) there are now editor plugins that will allow you to browse JSON lines files in a readable way. The JSON lines format is therefore a great compromise between machine and human readability: It has the flexibility of JSON while allowing the line-by-line processing of CSV.