You can use generator expression and next function, like this
next(entry['id'] for entry in stop_list if entry['name'] == name)
This will iterate through the stop_list and when it finds a match, it will yield entry['id']. This will be better because this doesn't have to iterate the entire list.
Another advantage is, if there are more than one matches, then you can use the same expression to get the next id also, like this
>>> ids = next(entry['id'] for entry in stop_list if entry['name'] == name)
>>> next(ids)
# you will get the first matching id here
>>> next(ids)
# you will get the second matching id here
If there is going to be more than one lookups, and given the names are unique, then preprocess the list and create a dictionary, like this
lookup = {entry['name']: entry['id'] for entry in stop_list}
then you can do lookups in constant time, with lookup[name]. This would be the most efficient way if the names are unique and if there are more than one lookups
{stop_name: stop_id, ...}(if the names are unique) or{stop_name: [stop_id, ...], ...}(if not)? You build it once then lookups by name areO(1).