我正在学习Python,目前是字典理解。我在玩各种不同的想法,只是为了看看我能得到什么,而我正在得到一个我真的不明白的想法。任何了解我在做什么错的帮助将不胜感激。
具体来说,这段代码:
test_dict = {key: val
for key in ['a','b','c']
for val in range(3)}
print(test_dict)
产生以下字典: {'a': 2, 'b': 2, 'c': 2}
我期待着: {'a': 0, 'b': 1, 'c': 2}
当我运行此快速循环时:
for val in range(3):
print(val)
我得到:
0
1
2
是否有每个字典键都获得相同值(范围迭代器的最终值)的原因?
我正在通过Anaconda / Jupyter笔记本运行Python 3.6.5。
让我们炸开对dict的理解;它等效于以下内容:
test_dict = {}
for key in ['a','b','c']:
for val in range(3):
test_dict[key] = val
因此,对于每个键,您需要对字典执行三种不同的分配。自然,仅保留最后一个。
要获得所需的结果,只需为每个键分配一次。在这种情况下,一种显而易见的方法是使用enumerate()
序列中的项目编号,然后将其用作值。
test_dict = {key: val for val, key in enumerate(['a','b','c'])}
对于任何两个序列的一般情况,请使用zip()
:
test_dict = {key: val for key, val in zip(['a', 'b', 'c'], range(3))}
实际上,由于dict
构造函数很乐意使用一系列键/值对,因此可以这样写:
test_dict = dict(zip(['a', 'b', 'c'], range(3)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句