字典理解产生意外结果

资料库

我正在学习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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章