のpython 2.7から出発溶液
、あなたは辞書内包表記を使用することができます。そこリスト内包に似ていますが、辞書に適用される:
>>> parent_dict = {1: 'Homer',
... 2: 'Bart',
... 3: 'Lisa',
... 4: 'Marge',
... 5: 'Maggie'
... }
>>> {key:val for key,val in parent_dict.iteritems() if 2 < key < 4 }
1: {3: 'Lisa'}
あなたはおそらくそれ機能する必要はありませんが、あなたがしなければ、あなただけのフィルタとしてラムダ関数を使用することができます。
Pythonの2.6.5と2.7より前のすべてのバージョンについては
>>> def filter_func(somedict, key_criteria_func):
... return {k:v for k, v in somedict.iteritems() if key_criteria_func(k)}
...
... filter_func(parent_dict, lambda x: 2 < x < 4)
2: {3: 'Lisa'}
、とdictの理解を置き換える:
dict((k,v) for k,v in parent_dict.iteritems() if 2 < k < 4)
なぜラムダ関数?
ラムダ関数は魔法ではなく、簡単にその場で作成することができます。あなたはlambda
といっしょにすることができますが、唯一の違いはラムダが式であり、そのために親の間で直接使用できることです。
>>> def func(x):
... return 2 < x < 4
...
>>> func(3)
True
それはまったく同じだと名前を持っていませんラムダ関数を除いて、同じ機能を生成:
>>> func = lambda x: 2 < x < 4
>>> func(3)
True
で:
を比較してください。しかし、あなたは気にしません。あなたは名前が必要ではありません。それを呼び出すための参照が必要です。変数func
にこの参照が含まれています。あなたはdef var(param):
が、var = lambda param:
をしない
(あなたも、パラメータを必要としない)のパラメータの括弧は必要ありません
返される今、ラムダとの良いところは、それは表現なので、あなたは意味、Parentheseの間でそれを使用することができるということです同じ時間にあなたの作成し、渡すことができます。
は比較:
>>> filter_func(parent_dict, lambda x: 2 < x < 4)
で:
>>> def func(x):
... return 2 < x < 4
...
>>> filter_func(parent_dict, func)
それはまったく同じです。ラムダはちょうど短いです。
難しい部分は、Pythonのすべての関数が関数を含むオブジェクトであるため、関数をPythonのパラメータとして渡すことができることを理解することです。
>>> def func():
... print "test"
...
>>> ref_to_func = funC# assign the function refence to another var
>>> del funC# delete this label
>>> ref_to_func() # call the function from this label
test
をあなたも1行にfonctionを定義することができます:
あなたも、これを行うことができます
>>> def func(): print "test"
>>> func()
test
しかし、あなたはこれを行うことはできません。
filter_func(parent_dict, def func(x): 2 < x 4)
をラムダが役に立つ場所です。
ラムダについて少し説明を追加しました。楽しい。 –