python - 字典生成器中的多个 'for' 循环

原文 标签 python python-3.x generator

this Python documentation以下用作生成器表达式的示例:

dict((fn(i+1), code)
    for i, code in enumerate('FGHJKMNQUVXZ')
    for fn in (int, str))

>> {1: 'F', '1': 'F', 2: 'G', '2': 'G', 3: 'H', '3': 'H', 4: 'J',...}

我不明白第二个如何for循环,for fn in (int, str) , 将 int 值转换为字符串并向字典中添加一个附加条目。

我找到了 this Stack Overflow question ,但我仍然无法直观地了解第二个 for循环在这种情况下有效。

最佳答案

在您的示例中,您正在使用由以下文字表示的元组序列(此处由生成器表达式提供)构建字典

(fn(i+1), code)

在这个元组文字中,所有术语(除了 1 :)都由两个循环提供;外循环
… for i, code in enumerate('TROIDSNB') …

为您提供i , 一个整数值和 code , 一个 1 个字符长的字符串——这些值在您执行内循环时是固定的;
内循环为您提供 fn 的值
… for fn in (int, str) …

可以假设 2 个值,或者 fn=intfn=str .

构造第一个元组时,i=0 , code='T'fn=int
(int(0+1), 'T')

当构造第二个元组时,icode (由外循环提供)没有改变但fn=str ,所以传递给字典构造函数的新元组是
(str(0+1), 'T')

此时内循环已经结束……外循环更新其变量的值,i=1code=R ,内部循环被重置,因此 fn=int并生成一个新元组
(int(1+1), 'R')

等等等等

关于python - 字典生成器中的多个 'for' 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41340400/

相关文章:

python - 调整滑动窗口Python生成器功能以随机播放窗口

python - 如何获得对生成器的send方法的弱引用?

python - 在Python中具有2个列表的ListAccess(list)类

python - assertRaises不会引发ValidationError

python - 1_000和100_000是什么意思?

python - 为什么我的ipywidget观察到在一个状态更改中多次被调用?

python - ImportError:_imagingft C模块未安装在alpine-docker中

python - 限制访问仅拥有的内容 django

python - 在python中存储时间序列数据

c# - map 生成器的渐变圆