找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3916|回复: 5

[已解决] 看《Python基础教程》遇到个问题有关fromkeys方法,求解答

3

主题

12

帖子

12

积分

贫民

积分
12
izhy3938 发表于 2016-12-3 19:01:04 | 显示全部楼层 |阅读模式
01.jpg # 上面fromkeys键的参数应该该用列表形式,但不影响结果
运行结果
{'middle': {'Magnus': ['Magnus lie Hetland']}, 'last': {'Magnus': ['Magnus lie Hetland']}, 'first': {'Magnus': ['Magnus lie Hetland']}}
我想得到的结果是
{'middle': {}, 'last': {}, 'first': {'Magnus': ['Magnus lie Hetland']}}
用我图中多行注释掉的代码创建字典就可以得到第二个结果,而用dict.fromkeys方式创建的字典会得到第一个结果,为什么?去看Python的官方教程也没有相关的说法,请教一下为什么会出现这个情况以及为什么连官方教程也不给说清楚?

回复

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-12-3 21:51:48 | 显示全部楼层
本帖最后由 whydo1 于 2016-12-3 22:20 编辑

确实有这样的问题。
第二个参数设置为字符串和数值时没有问题,设置为字典,列表时都有这个问题。
python3.4.4, win10
回复 支持 反对

使用道具 举报

3

主题

12

帖子

12

积分

贫民

积分
12
izhy3938  楼主| 发表于 2016-12-3 22:18:46 | 显示全部楼层
whydo1 发表于 2016-12-3 21:51
确实有这样的问题。

请问是怎么回事?
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-12-3 22:41:06 | 显示全部楼层
第二个参数设置为字符串和数值时没有问题,设置为字典,列表时都有这个问题。这应该算是该方法的局限。

第二个参数设置为字典或列表时, 新生成的字典中的每一个键值对中的值都是同一个对象,所以修改一个,相当于修改了所有了值,因为他们本身就是相同的东西。

可以这样处理:
>>> storage = dict.fromkeys(('first', 'middle', 'last'), {})
>>> for key in storage.keys():
...   storage[key]={}
...
>>> storage['first' ]['magnus']=['blabla']
>>> storage
{'last': {}, 'middle': {}, 'first': {'magnus': ['blabla']}}
python3.4.4, win10
回复 支持 反对

使用道具 举报

3

主题

12

帖子

12

积分

贫民

积分
12
izhy3938  楼主| 发表于 2016-12-4 14:02:49 | 显示全部楼层
whydo1 发表于 2016-12-3 22:41
第二个参数设置为字符串和数值时没有问题,设置为字典,列表时都有这个问题。这应该算是该方法的局限。

第 ...

感谢大神回复,请问如何才能知道你所知道的这些知识,这些知识为什么连官方英文版的哪个教程豆没有?是编写教程的人不会这些知识,根本没发现这个问题么?
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-12-4 21:15:02 | 显示全部楼层
大概设计这个函数的时候考虑的主要是赋实值的情况吧。
python3.4.4, win10
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表