Another scala one, avoiding groupBy/mapValues (although that's the obvious Scala solution this one follows the python one given by Vishni since @MetallicPriest commented that was "much easier")
val data = Seq(("Key1", "Value1"), ("Key1", "Value2"), ("Key1", "Vaue3"),
("Key2", "Value4"), ("Key2", "Value5"))
val dict = Map[String, Seq[String]]() withDefaultValue(Nil)
data.foldLeft(dict){ case (d, (k,v)) => d updated (k, d(k) :+ v) }
// Map(Key1 -> List(Value1, Value2, Vaue3), Key2 -> List(Value4, Value5))
(Does an append of the key to give the exact results of the question. Prepend would be more efficient, though)
Mutable version, even closer to the Python one:
import scala.collection.mutable.{Map, Seq}
val dict = Map[String, Seq[String]]() withDefaultValue(Seq())
for ((k,v) <- data) dict(k) :+= v
dict
// Map(Key2 -> ArrayBuffer(Value4, Value5),
// Key1 -> ArrayBuffer(Value1, Value2, Vaue3))