这两个python forloop是一回事吗?

2024-04-25 12:53:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在看一个视频教程,我被dict()命令中的for循环弄得措手不及。我很难在dict()命令上搜索东西(一直在字典上获取定义,而不是命令),所以我现在假设我可以在命令中添加for循环。你知道吗

在他们使用的视频中

dict((m[:3].lower(),m) for m in months)

所以我很好奇这是否和

for m in months:
    variable = dict((m[:3].lower(),m))

这是供参考的视频 https://youtu.be/a2sLiEgBl9k?t=1m17s


Tags: inhttps命令for视频字典定义be
2条回答

此表达式正在使用生成器表达式创建dict。你知道吗

d = dict((m[:3].lower(),m) for m in months)

相当于

d = dict()
for m in months:
    d[m[:3].lower()] = m

你的第二个循环不是在做同样的事情。每个月迭代一次,然后用一个条目创建一个dict,并将其分配给variable。每次迭代都会覆盖此变量。你知道吗

从代码来看,他们正试图制作这样一本字典:

{'jan': 'January',
 'feb': 'February',
 'mar': 'March',
 ...
}

不,那不一样。你知道吗

您的版本在每次迭代中创建一个新的dictionary对象,只有一个键和值。视频中的版本创建一个带有一系列键值对的dictionary对象。你知道吗

视频中的版本相当于:

d = {}
for m in months:
    d[m[:3].lower()] = m

而是使用generator expression在循环中生成键值对(作为元组)。dict()对象获取每个这样的对,并将它们添加到正在构造的字典中。你知道吗

在Python2.7及更新版本中,也可以使用dictionary comprehension编写:

{m[:3].lower(): m for m in months}

最终的结果是一本字典,每个月的前三个字母(小写)作为关键字:

>>> import calendar
>>> months = calendar.month_name[1:]
>>> {m[:3].lower(): m for m in months}
{'mar': 'March', 'feb': 'February', 'aug': 'August', 'sep': 'September', 'apr': 'April', 'jun': 'June', 'jul': 'July', 'jan': 'January', 'may': 'May', 'nov': 'November', 'dec': 'December', 'oct': 'October'}
>>> pprint(_)
{'apr': 'April',
 'aug': 'August',
 'dec': 'December',
 'feb': 'February',
 'jan': 'January',
 'jul': 'July',
 'jun': 'June',
 'mar': 'March',
 'may': 'May',
 'nov': 'November',
 'oct': 'October',
 'sep': 'September'}

相关问题 更多 >