我遇到这个奇怪的问题今天早上来的?怪异蟒蛇字典augement分配
回答
dict.fromkeys
创建了一大堆引用的列表。换句话说,d['a']
是d['b']
等当你做+=
你扩大名单到位,所以在所有列表中看到修改 - 毕竟,他们是相同的列表。
>>> l = ['a', 'b', 'c']
>>> d = dict.fromkeys(l, [])
>>> d
{'a': [], 'c': [], 'b': []}
>>> print [id(v) for v in d.values()] # Note, they all have the same ID -- They're the same.
[4385936016, 4385936016, 4385936016]
>>> d['a'] += [1]
>>> d
{'a': [1], 'c': [1], 'b': [1]}
正如在评论中指出,我其实并没有告诉你如何解决这个问题。如果你想初始化是可变值的情况下键的字典,你可以使用字典解析:
d = {key: [] for key in l}
或者,如果你坚持使用旧版本的Python(python2.7之前)你传递产生2元组的字典构造一个迭代:
d = dict((key, []) for key in l)
注意,有以及其他变体是了解(colections.defaultdict
,常规字典子与重写__missing__
)是有用的。其中每个都有稍微不同的行为,我会解释here。然而,这应该是足以让你去暂且...
海报试图做的正确表示法是'dict = {key:[] for key in l}',为每个键设置自己的唯一列表,我不想在发布新的答案时你已经钉上了它。 – user2085282 2014-08-28 02:36:24
@ user2085282 - 好点。我想我应该提供一个替代方案。 。 。 – mgilson 2014-08-28 05:14:18
您可能会感兴趣的collections.defaultdict:
In [66]: d = collections.defaultdict(list)
In [67]: d['a'] += [1]
In [68]: d
Out[68]: defaultdict(<class 'list'>, {'a': [1]})
In [69]: dict(d)
Out[69]: {'a': [1]}
In [70]: d['b']
Out[70]: []
In [71]: dict(d)
Out[71]: {'b': [], 'a': [1]}
In [72]: d['c']
Out[72]: []
In [73]: dict(d)
Out[73]: {'b': [], 'c': [], 'a': [1]}
- 1. 了解蟒蛇字典内存分配
- 2. 蟒蛇:字典
- 3. 奇怪的蟒蛇字典行为
- 4. MacOS X的怪异蟒蛇
- 5. 在字典(蟒蛇)
- 6. 从字典蟒蛇
- 7. 蟒蛇从字典
- 8. 蟒蛇:从字典
- 9. 蟒蛇查找字典在字典
- 10. 蟒蛇:字典的元组字典
- 11. 蟒蛇:使用字典
- 12. 字典错误 - 蟒蛇
- 13. 蟒蛇比较字典
- 14. 蟒蛇字典到文件
- 15. 蟒蛇Django的字典
- 16. 如何从字典蟒蛇
- 17. 字典映射蟒蛇
- 18. 无法从蟒蛇字典
- 19. 蟒蛇字典功能
- 20. 蟒蛇字典的国家
- 21. 蟒蛇MySQL的字典
- 22. 蟒蛇字典,以CSV
- 23. 蟒蛇,从列表字典
- 24. 蟒蛇多指标分配
- 25. 蟒蛇片分配列出
- 26. 蟒蛇:分配错误
- 27. 蟒蛇删除怪异撇号和其他怪异字符无法在string.punctuation
- 28. 蟒蛇 - 多格式字符串%字典
- 29. 蟒蛇字典:引发异常,如果没有价值遇到
- 30. 蟒蛇/瓶和返回字典
无法复制。 – 2014-08-28 02:26:07
我不认为你在发布你实际使用的代码。 – BrenBarn 2014-08-28 02:27:42
对不起,我用了dict.fromkeys函数,我想我正在关闭原因 – yorua007 2014-08-28 02:29:19