0

我正在学习 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)

我根本不明白这个 for 循环。我看着它,它让我的大脑融化。我知道 statesAbbrev.items() 可能正在从该字典中获取第一个项目,但尚未定义“状态”,“缩写”是什么?还有一个for循环如何调用'something,somethingElse'

请帮我理解!

你可以在这里找到整个练习和所有代码:http: //learnpythonthehardway.org/book/ex39.html

4

2 回答 2

5

欢迎来到 Python 编程!

state并由for 循环abbrev定义statesAbbrev.items()返回包含字典键和值的元组列表:

[('Oregon', 'OR'), ('Florida', 'FL') ...]

如此有效地,您正在遍历该列表。

什么

for state, abbrev in ...:

do 被称为元组解包:获取一个包含 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

头脑。 吹。

于 2013-10-27T21:11:48.070 回答
2

如果你这样做:

print statesAbbrev.items()

你得到输出:

[('Washington', 'WA'), ('Michigan', 'MI'), ('Florida', 'FL'), ('Oregon', 'OR'), ('New York', 'NY'), ('California', 'CA')]

这是一个元组列表,其中每个元组都将字典的键statesAbbrev作为其自身的第一项,并将该键的值作为第二项。

现在有问题的循环应该是有意义的!:)

于 2013-10-27T21:13:31.817 回答