我正在浏览一个视频教程,我在一个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
答案 0 :(得分:3)
此表达式使用生成器表达式创建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',
...
}
答案 1 :(得分:3)
不,那不一样。
您的版本每次迭代都会创建一个新的字典对象,只有一个键和值。视频中的版本使用一系列键值对创建一个字典对象。
视频中的版本相当于:
d = {}
for m in months:
d[m[:3].lower()] = m
但是使用generator expression来生成循环中的键值对(作为元组)。 dict()
对象获取每个这样的对并将它们添加到正在构造的字典中。
并且在Python 2.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'}