Function returning a key value from a dict within a list

Question:

I have a list that contains dicts – I want a function that returns a key value from a dict within that list. Explanation below.

The below function simulate_tournament takes a list as input and is supposed to return a string (not a list/dict) by way of indexing.

When I try to get the return value I need (a string which is the key value of a dict within the list) with return teams[0]['teams'], I am not able to. The error: TypeError: string indices must be integers.
With return teams, I am getting the list containing the dict, which kind of works for me but is not desirable.

def simulate_tournament(teams):
    """Simulate a tournament. Return name of winning team."""
    teams = simulate_round(teams)
    if (len(teams) != 1):
        teams = simulate_tournament(teams)

    return teams[0]["team"]

However, when I change the code to the following, I am somehow able to get exactly the return value I need. No error.

def simulate_tournament(teams):
    """Simulate a tournament. Return name of winning team."""
    while (len(teams) > 1):
        teams = simulate_round(teams)

    return teams[0]["team"]

What am I missing here that I am getting an error in the first version of this function and not the second one?

Asked By: user19775552

||

Answers:

Your first function takes teams – a list of dicts – as a parameter and returns a name of a team. So the following line:

teams = simulate_tournament(teams)

makes no sense, because you are replacing your list of dicts with a string containing a team name. That is why

teams[0]["team"]

creates an error.

To use the function recursively, it has to return the same kind of data that it accepts as a parameter. This does not seem like a good use case for a recursive function – it creates confusion and doesn’t achieve anything you couldn’t do easily with a loop – so your second method is better.

Answered By: Stuart
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.