一、背景
在做统计的时候,经常会用到dict,而dict有一个很方便的方法fromkeys(),它可以基于一个序列和一个默认值快速生成一个dict
二、dict.fromkeys()的帮助文档
Help on built-in function fromkeys:
fromkeys(...)
dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
v defaults to None.
三、示例
1. 默认值为字符串的示例
>>> a = [1, 2, 3]
>>> b = "hello python"
>>> c = dict.fromkeys(a, b)
2. 默认值为字典的示例
>>> a = [1, 2, 3]
>>> b = {"age": 18}
>>> c = dict.fromkeys(a, b)
, 2: {'age': 18}, 3: {'age': 18}}
四、坑
千万不要认为这个默认值在经过dict.fromkeys()的方法调用之后,在结果对象中都是一个新的对象,即c的value是不同的对象,但其实是相同的对象,无论默认值是简单的字符串类型,还是复杂的字典类型
1. 默认值为字符串的示例
>>> for key, value in c.iteritems():
... print key, value, id(value)
...
2. 默认值为字典的示例
>>> for key, value in c.iteritems():
... print key, value, id(value)
...
可以看到值的id是相同的
五、此类需求的解决办法
使用字典解析式,如下
>>> a = [1, 2, 3]
>>> c = for item in a}
, 2: {'age': 18}, 3: {'age': 18}}
>>> for key, value in c.iteritems():
... print key, value, id(value)
...
领取专属 10元无门槛券
私享最新 技术干货