I think you will need the following setup to work. I'd test this extensively, as it seems somewhat fragile.
a) Prefix your city taxonomy path alias pattern to something like 'cities/[term-name]'. You can't create a view page with a path that starts with an argument.
b) Add another view (you may want to disable the default tax term view or alter the default taxonomy term view ) with 2 contextual filters, 1) Content: Has taxonomy term ID set to provide default value (raw path using 2 component and alias) restricted to the city vocab. and 2) Content: Has taxonomy term ID set to provide default value (raw path using 2 component and alias) restricted to the places vocab.
These contextual filters will share these settings: in the validation criteria, Filter value type set to 'Term name converted to Term ID' and tick the 'Transform dashes to URL to spaces in term name filter values' checkbox.
For the second contextual filter, set 'Action to take in filter value does not validate' to "Show all", which will allow you show all results when viewing 'cities/london'.
Note, using this technique can be problematic if you anticipate any of your terms containing apostrophes, b/c the path alias for a term with an apostrophe can be name-s-something and this won't be converted to a term id.
c) Then, you'll need to alter the link generated by your existing unordered list of places view. Not sure how to go about this in the UI alone. If you share your exported view code, I'll take a look. If you can, you could create a view field template file to retrieve arg(0) and arg(1) and then use those results to generate the link in the template file.