In the case of a List, without a type declaration, Scala looks at all the elements and tries to find the common type. In your case, since Int can be converted to Double, it converts your mixed List into a List[Double] promoting your one Int.
The Map constructor takes a series of 2-tuples. You would get the same behavior, if you just constructed a list of tuples:
scala> List((1, "one"), (2.0, "two.oh"))
res0: List[(AnyVal, String)] = List((1,one), (2.0,two.oh))
Tuple2[Int, String] cannot automatically be promoted to Tuple2[Double, String]. In this case, you'll need to help the compiler out a bit with a type declaration:
scala> val x: List[(Double, String)] = List((1, "one"), (2.0, "two.oh"))
x: List[(Double, String)] = List((1.0,one), (2.0,two.oh))
or
scala> val x = List[(Double, String)]((1, "one"), (2.0, "two.oh"))
x: List[(Double, String)] = List((1.0,one), (2.0,two.oh))
or in your case:
scala> val x = List[(Double, String)]((1, "one"), (2.0, "two.oh")).toMap
x: scala.collection.immutable.Map[Double,String] = Map(1.0 -> one, 2.0 -> two.oh)
For some reason, using the type declaration on Map doesn't work. Not sure why:
scala> val x = Map[Double, String](1 -> "one", 2.0 -> "two.oh")
<console>:7: error: type mismatch;
found : (Int, String)
required: (Double, String)
val x = Map[Double, String](1 -> "one", 2.0 -> "two.oh")