dict.fromkeys strange behavior

Terry Reedy tjreedy at udel.edu
Mon Dec 7 14:51:39 EST 2009


Tsviki Hirsh wrote:

>  >>>dict.fromkeys('at',50)
> {'a': 50, 't': 50}
> 
> This is obviously not what I wanted.

Not obvious at all. It is precisely what you asked for ;-)

Please read the doc:
5.8. Mapping Types — dict
"classmethod fromkeys(seq[, value])
Create a new dictionary with keys from seq and values set to value."

The purpose of .fromkeys is to create a dict with multiple keys 
initially mapped to the one and same value (None by default). If you do 
not want that, do not use it.

or nearly as clear:
 >>> help(dict.fromkeys)
fromkeys(...)
     dict.fromkeys(S[,v]) -> New dict with keys from S and values equal 
to v. v defaults to None.

I *strongly* recommend that all beginners peruse the Library Reference 
up through Chapter 5. It you are puzzled by the behavior of a builtin 
object, go back and look up the specific doc.

> What are the alternatives?

If you want {'at':50}, say that.

Terry Jan Reedy






More information about the Python-list mailing list