2012-03-12 10 views
0

読書diveintopython3はこれに来て、私は理解するより小さなビットに分解することはできません。この変数はどこに定義されていますか?

>>> a_dict = {'a': 1, 'b': 2, 'c': 3}       
>>> {value:key for key, value in a_dict.items()}    
>>> {1: 'a', 2: 'b', 3: 'c'} 

a_dict.items()はリストを作成します。しかし、値が定義されていないので、a_dict.items()の値は意味をなさない...

whats going on here?

+0

は、あなたの 'for'が言っている:それに割り当てられた各' key'と[値]を引き出し、対応する変数に格納します。便利ですか? – rjz

+0

それを色の文法で見ると突然クリックしました。何かのために>>>何かを見つけました:何か2つの変数を1つではなくループしていました。元々はコンマが外側{} 。私はものの中の声明を見るのに慣れていないよ –

+0

あなたはそれを持っている!^ – rjz

答えて

4

a_dict.keys()があなたの辞書

a_dict.values()キーのリストでは、

a_dict.items()があるあなたの辞書にのリストです(キー、値)のリストのペア

{value:key for key, value in a_dict.items()}a_dictを取り、結果として新たなデータ構造を返す、そのとのキースイッチ辞書()理解あります。あなたがよく見ると、結果部分にはvalue:keyがありますが、反復部分にはkey, valueがあることがわかります。非常にトリッキー、非常にpythonic。

a_dictに重複する値がない場合は、元の辞書の逆になります。重複がある場合、新しいdictのすべてのキーは一意でなければならないので、重複した値のそれぞれのマッピングのうちの1つだけが生き残ります。あなたは困難な彼らがどのように動作するか理解を抱えている場合はここ

>>> a_dict = {'a': 1, 'b': 2, 'c': 3} 
>>> b_dict = {value:key for key, value in a_dict.items()} 

>>> a_dict.items() 
[('a', 1), ('c', 3), ('b', 2)] 
>>> b_dict.items() 
[(1, 'a'), (2, 'b'), (3, 'c')] 

>>> a_dict.keys() 
['a', 'c', 'b'] 
>>> b_dict.values() 
['a', 'b', 'c'] 

>>> a_dict.values() 
[1, 3, 2] 
>>> b_dict.keys() 
[1, 2, 3] 

# Try one with duplicates! 
>>> c_dict = {'a': 1, 'b': 2, 'c': 3, 'd':2} 
>>> d_dict = {value:key for key, value in c_dict.items()} 

# The number 2 can only map to one value; 
# the constructor seems to have encountered 'd' last 
>>> c_dict.items() 
[('a', 1), ('c', 3), ('b', 2), ('d', 2)] 
>>> d_dict.items() 
[(1, 'a'), (2, 'd'), (3, 'c')] 

のdict()理解の単純な例です。あなたのインタラクティブなエディタにそれを入力し、それを取り乱してください!

>>> e_dict = {n: str(n) * n for n in range(1, 30)} 
1

価値が明確にここで定義されています

'a':1 

これは、インデックスが 'ようになど、1の値を有することを意味します。

2行目では、キーとして値を使用し、最初のdictの値としてキーを使用してdictを作成しました。

+0

は明らかに相対的な言葉です... –

+0

私は誰か何かを怒らせるために "明確に"という言葉を使用しませんでした。関数や式などを使わずに明確に定義されているため、関数や式を介して生成されたことを暗示しています。 – DanRedux

1

値とキーは、辞書の実際の内容のプレースホルダです。これは、基本的に、辞書内のすべてのキー:値のペアを意味し、値の部分は値に割り当てられ、キーの部分はキーに割り当てられます。値とキーの

内容:

iteration value  key 
    1   1  'a' 
    2   2  'b' 
    3   3  'c' 
1

このライン:

{value:key for key, value in a_dict.items()}

が内包表記を一覧表示することが似ている辞書の理解、と呼ばれています。 PEP 274では、この構文について詳しく説明します。

拡大表現がされていること:平野英語で

temp_dict = dict() 
for key, value in a_dict.items(): 
    temp_dict[value] = key 
print temp_dict 
+0

+1のPEP! :) –

関連する問題