Порядок немного отличается, но да, это возможно:
fun main(args: Array<String>) {
data class Person(val name: String, val city: String, val phone: String)
val people = listOf(
Person("John", "Boston", "+1-888-123456"),
Person("Svyatoslav", "Saint-Petersburg", "+7-999-456700"),
Person("Svyatoslav", "Saint-Petersburg", "+7-999-456789"),
Person("Vasilisa", "Saint-Petersburg", "+7-999-123456"))
val phoneBook = people.groupBy(Person::city)
.mapValues { (_, v) -> v.groupBy(Person::name) }
println(phoneBook)
}