我正在努力学习Python The Hard Way,我在练习中遇到某些循环时遇到了一些麻烦,并且找不到信息。
这是代码。
statesAbbrev = {
"Oregon" : "OR",
"Florida" : "FL",
"California" : "CA",
"New York" : "NY",
"Michigan" : "MI",
"Washington" : "WA"
}
statesCities = {
"CA" : "San Francisco",
"MI" : "Detroit",
"FL" : "Jacksonville",
"WA" : "Seattle",
"NY" : "Buffalo"
}
print "-" * 10
for state, abbrev in statesAbbrev.items():
print "%s is abbreviated %s" % (state, abbrev)
我根本不理解这个循环。我在看它,它让我的大脑融化。我明白statesAbbrev.items()可能抓住了那个dict中的第一个项目,但是'state'还没有定义,'abbrev'是什么?另外for循环如何调用'something,somethingElse'
请帮助我理解!
您可以在此处找到整个练习和所有代码:http://learnpythonthehardway.org/book/ex39.html
答案 0 :(得分:5)
欢迎使用Python编程!
state
和abbrev
由 for循环定义。 statesAbbrev.items()
返回包含字典键和值的元组列表:
[('Oregon', 'OR'), ('Florida', 'FL') ...]
如此有效地循环遍历该列表。
什么
for state, abbrev in ...:
将其称为元组解包:获取N个元素的元组并立即将其分配给N个变量。因此,每次循环时,state
和abbrev
都会设置为statesAbbrev
字典中的一个条目。
希望有所帮助!
您可以尝试使用尽可能多的值自行解包:
In [1]: a,b,c = 1,2,3
In [2]: a
Out[2]: 1
In [3]: b
Out[3]: 2
In [4]: c
Out[4]: 3
In [5]: def x(): return (1,2,3,4)
In [6]: d,e,f,g = x()
In [7]: d
Out[7]: 1
In [8]: e
Out[8]: 2
In [9]: f
Out[9]: 3
In [10]: g
Out[10]: 4
但如果你给它的值太少或太多,你就会得到这样的错误:
In [11]: a,b = (1,2,3)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-11-9c07109388c5> in <module>()
----> 1 a,b = (1,2,3)
ValueError: too many values to unpack
In [12]: a,b,c,d,e,f,g = (1,2,3)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-12-fcc71a498285> in <module>()
----> 1 a,b,c,d,e,f,g = (1,2,3)
ValueError: need more than 3 values to unpack
至于循环:
In [13]: lst = [(1,2,3,4),(5,6,7,8)]
In [14]: for a,b,c,d in lst:
....: print a,b,c,d
....:
1 2 3 4
5 6 7 8
答案 1 :(得分:2)
如果你这样做:
print statesAbbrev.items()
你得到了输出:
[('Washington', 'WA'), ('Michigan', 'MI'), ('Florida', 'FL'), ('Oregon', 'OR'), ('New York', 'NY'), ('California', 'CA')]
这是一个元组列表,其中每个元组都有字典statesAbbrev
的密钥作为第一个项目,第一个项目的值作为第二个项目。
现在有问题的循环应该有意义! :)