【发布时间】:2021-11-12 02:57:42
【问题描述】:
我最近在 Python 中遇到了这个很酷的 hack。
这个:
d = {}
for i, d[i] in enumerate('abc'):
pass
>>> d
{0: 'a', 1: 'b', 2: 'c'}
>>>
这会将键值对分配给迭代器中的空字典。
我想知道 Cython 后端是如何解析这个的,我的期望是它是通过解包分配来解析的。但是很高兴知道这个的实际 Cython 实现,以及是否推荐这样做?
我知道我可以做到:
d = {}
for i, v in enumerate('abc'):
d[i] = v
但是上面很酷的 hack 可以用更短的代码做到这一点,但我不确定这在 Python 中是否被认为是好的做法。
我从没见过有人用这个...
【问题讨论】:
-
说到更短的代码
d = dict(enumerate('abc'))要好得多。但我尊重你的代码 sn-p 是如何完成的好奇心。 -
哦,快。我什至没有检查。因为这太明显了:D
-
其实第一个版本比第二个长:D
-
你的意思是在 cpython 中?
-
@buran 在这个特殊的用法中,是的。在其他情况下,它有一些好处,正如我现在在回答中所描述的那样。
标签: python python-3.x dictionary for-loop enumerate