Color Ratios

def get_color_ratios(colors, ratios):
    """Return dictionary of color ratios from color and ratio lists."""
    assert len(colors) == len(ratios)
    color_ratios = {}
    for i in range(len(colors)):
        color_ratios[colors[i]] = ratios[i]
    return color_ratios


if __name__ == "__main__":
    test_colors = ["red", "green", "blue"]
    test_ratios = [0.1, 0.6, 0.3]
    combined_dict = {'red': 0.1, 'green': 0.6, 'blue': 0.3}
    assert get_color_ratios(test_colors, test_ratios) == combined_dict

Use enumerate to get the i-th index of the list as we loop over it: “Explicit is better than implicit.” and “Simple is better than complex.”

def get_color_ratios(colors, ratios):
    """Return dictionary of color ratios from color and ratio lists."""
    assert len(colors) == len(ratios)
    color_ratios = {}
    for i, color in enumerate(colors):
        color_ratios[color] = ratios[i]
    return color_ratios

Use zip to combine colors and ratios lists, looping over both at once: “Complex is better than complicated.”

def get_color_ratios(colors, ratios):
    """Return dictionary of color ratios from color and ratio lists."""
    assert len(colors) == len(ratios)
    color_ratios = {}
    for items in zip(colors, ratios):
        color_ratios[items[0]] = items[1]
    return color_ratios

Unpack each zipped item into verbose variable names while looping: PEP 8 and “Explicit is better than implicit.”

def get_color_ratios(colors, ratios):
    """Return dictionary of color ratios from color and ratio lists."""
    assert len(colors) == len(ratios)
    color_ratios = {}
    for color, ratio in zip(colors, ratios):
        color_ratios[color] = ratio
    return color_ratios

Move this for loop into a dictionary comprehension: “Complex is better than complicated.” and “Flat is better than nested.”

def get_color_ratios(colors, ratios):
    """Return dictionary of color ratios from color and ratio lists."""
    assert len(colors) == len(ratios)
    color_ratios = {c: r for (c, r) in zip(colors, ratios)}
    return color_ratios
  1. Remove unnecessary variable which is returned immediately: “Simple is better than complex.”

  2. Use ability of dict to take list of two-tuples to make dictionary: “Simple is better than complex.” and “Beautiful is better than ugly.”

def get_color_ratios(colors, ratios):
    """Return dictionary of color ratios from color and ratio lists."""
    assert len(colors) == len(ratios)
    return dict(zip(colors, ratios))