No.2ベストアンサー
- 回答日時:
https://docs.python.jp/2.7/library/functions.htm …
https://docs.python.jp/3/library/functions.html# …
辞書は、イテレータとして使うと、 キーを順番に返します。
for i in dic: print(i)
などで確認できます。
https://docs.python.jp/3/library/stdtypes.html#d …
> iter(d)
> 辞書のキーに渡るイテレータを返します。これは iter(d.keys()) へのショートカットです。
max関数は、key引数を指定しなければ、イテレータからの値そのもので比較して、最大のものを返します。
このdicだと 'A' , 'B' のうち、最大を選びます。
keyに関数が指定されると、イテレータからの値を指定した関数に与えて、その戻り値で比較します。
max(dic, key=func1)
だと
func1('A') , func1('B')
を比較して、最大値を探します。
ただし、maxが返すのは、元のイテレータからの値、この例では'A'か'B'になります。
ここで、いちいちfunc1を定義するのも大変です。
そういうときに、無名の関数を用意することができます。
このとき使うのが lambda です。(ラムダと読みます)
lambda x: dic[x]
だと、引数は x 一つ、戻り値は dic[x] という関数、ということです。
このラムダ式を L だとすると、
L('A') , L('B')
を比較することになります。その中身は dic[x]ですから、それぞれ
dic['A'] , dic['B']
と同じになります。このうちの最大を探すことになります。
lambdaはうまく使うととても便利です。
lambdaの方が楽に書けるような例もあります。
https://docs.python.jp/3/library/functions.html# …
辞書は、イテレータとして使うと、 キーを順番に返します。
for i in dic: print(i)
などで確認できます。
https://docs.python.jp/3/library/stdtypes.html#d …
> iter(d)
> 辞書のキーに渡るイテレータを返します。これは iter(d.keys()) へのショートカットです。
max関数は、key引数を指定しなければ、イテレータからの値そのもので比較して、最大のものを返します。
このdicだと 'A' , 'B' のうち、最大を選びます。
keyに関数が指定されると、イテレータからの値を指定した関数に与えて、その戻り値で比較します。
max(dic, key=func1)
だと
func1('A') , func1('B')
を比較して、最大値を探します。
ただし、maxが返すのは、元のイテレータからの値、この例では'A'か'B'になります。
ここで、いちいちfunc1を定義するのも大変です。
そういうときに、無名の関数を用意することができます。
このとき使うのが lambda です。(ラムダと読みます)
lambda x: dic[x]
だと、引数は x 一つ、戻り値は dic[x] という関数、ということです。
このラムダ式を L だとすると、
L('A') , L('B')
を比較することになります。その中身は dic[x]ですから、それぞれ
dic['A'] , dic['B']
と同じになります。このうちの最大を探すことになります。
lambdaはうまく使うととても便利です。
lambdaの方が楽に書けるような例もあります。
No.1
- 回答日時:
> 辞書のキーを基準にしてmaxしろといことは実行すればわかります
違いますね。
辞書のキーを基準にしてるんじゃなくって、辞書の値を基準にしろ、って言ってるんです。
例示のコードがちと明解じゃないんで、次のようにしてみます。
dic = {"A":1, "B": 3, "C": 2}
キーとして考えるとA, B, Cの中ではCが最大です。値では3が最大ですね。
そこで、こう言う演算をさせると
>>> max(dic, key = lambda x: dic[x])
'B'
3が最大の値として(Bに)アサインされてるので、Bが返ってきます。
ところで、
lambda x: dic[x}
みたいな形式をラムダ式と呼んで、これは「無名関数」等と言われるものです。
これは外部的に例えば、
def key_func(x):
return dic[x]
等と定義して
>>> max(dic, key = key_func)
'B'
と演算させるのと同じ効果をもたらします。一々外部で関数を定義するのがメンド臭い場合、こうやってラムダ式で内部的に「関数をワンライナーで記述する」と言う事を良くやるわけです。
つまり、dic[x]のxはlambda式の引数xを受け取るようになってて、それは外部的に上記のようにkey_func関数を定義した場合の引数xと全く同じ効果をもたらすものです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
python エラー
-
Google ColaboでGUI作成
-
python の 連鎖代入の文法
-
chatGPTで次々と質問をしていく...
-
テキストファイルの1行目のみを...
-
昔のパソコン少年の武勇伝「店...
-
プログラミングの雑談がしたい...
-
VBAでパワーシェルを実行したい...
-
このURLで広告を出しているのは...
-
pythonでのカーソル移動がずれる
-
プログラミングを学ぼうと思い...
-
以下の技能を無料で受講できる...
-
プログラマーに向いている人の...
-
Win11で作業を自動化したいです...
-
Pythonのコードエラーについて...
-
このプログラミング言語のfor分...
-
Pythonで仮想通貨の自動売買が...
-
入力された文字列が、LD22000を...
-
VBA 電話番号の正規表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google Apps Script、onChange...
-
医は仁術ですか算術ですか
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
Statement ignored というエラー
-
キャッシュを使わずにSELECTを...
-
VBA プロシージャの名前の取得
-
sqlplusでヘッダーが付かない
-
SQL*Plusの終了はquit?exit?
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
SQLサーバで和暦から西暦に変換...
-
【Excel VBA】 WorksheetやRa...
-
全角空白のTRIMができない...
-
PL/SQLカーソルの2重FORループ...
-
Accessの数値から時間に変換す...
-
SQL文のエラー
-
SQL*Loaderでのsysdate使用
-
或るプロシージャの呼び出し元判定
おすすめ情報