0

私は Learning 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() はおそらくその辞書から最初の項目を取得していることを理解していますが、「状態」は定義されておらず、「abbrev」は何ですか? また、「something、somethingElse」で for ループを呼び出すにはどうすればよいですか

理解を助けてください!

演習全体とすべてのコードは、http: //learnpythonthehardway.org/book/ex39.htmlにあります。

4

2 に答える 2

5

Python プログラミングへようこそ!

statefor ループによってabbrev定義されています。辞書のキーと値を構成するタプルのリストを返します。statesAbbrev.items()

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

効果的にそのリストをループしています。

for state, abbrev in ...:

これは、タプルアンパッキングと呼ばれます: N 個の要素のタプルを取り、それを一度に N 個の変数に割り当てます。したがって、ループのたびstateに、ディクショナリabbrev内のエントリの 1 つに設定されます。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最初の項目として辞書のキーを持ち、2 番目の項目としてそのキーの値を持ちます。

これで、問題のループは理にかなっているはずです! :)

于 2013-10-27T21:13:31.817 に答える